commons-net包的FTP功能

xiaoxiao2022-11-25  249

package com.sinomos.rpt.bean; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPConnectionClosedException; /** *//** * @applicability 10.1.10.19 10.1.10.20 */ public class uFtp ...{ private FTPClient ftpClient = null; //private OutputStream outSteam = null; //ftp服务器地址 private String hostName; //ftp服务器默认端口 public static int defaultport = 21; //登录名 private String userName; //登录密码 private String password; //需要访问的远程目录 private String remoteDir; /** *//** * @param hostName 主机地址 * @param port 端口号 * @param userName 用户名 * @param password 密码 * @param remoteDir 默认工作目录 * @param is_zhTimeZone 是否是中文FTP Server端 * @return */ public uFtp(String hostName,int port,String userName,String password,String remoteDir,boolean is_zhTimeZone) ...{ this.hostName=hostName; this.userName=userName; this.password=password; this.remoteDir=remoteDir==null?"":remoteDir; this.ftpClient = new FTPClient(); if(is_zhTimeZone) ...{ this.ftpClient.configure(uFtp.Config()); this.ftpClient.setControlEncoding("GBK"); } this.login(); this.changeDir(this.remoteDir); this.setFileType(FTPClient.ASCII_FILE_TYPE); //this.changeDir(this.remoteDir); ftpClient.setDefaultPort(port); } /** *//** * 登录FTP服务器 */ public void login() ...{ try ...{ ftpClient.connect(this.hostName); ftpClient.login(this.userName, this.password); } catch (FTPConnectionClosedException e) ...{ // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) ...{ // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("连接到ftp服务器:" + this.hostName + " 成功..开始登录"); } //FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX); private static FTPClientConfig Config() ...{ FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX); conf.setRecentDateFormatStr("MM月dd日 HH:mm"); //conf.setRecentDateFormatStr("(YYYY年)?MM月dd日( HH:mm)?"); return conf; } /** *//** * 变更工作目录 * @param remoteDir--目录路径 */ public void changeDir(String remoteDir) ...{ try ...{ this.remoteDir = remoteDir; ftpClient.changeWorkingDirectory(remoteDir); } catch (IOException e) ...{ // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("变更工作目录为:"+remoteDir); } /** *//** * 返回上一级目录(父目录) */ public void ToParentDir() ...{ try ...{ ftpClient.changeToParentDirectory(); } catch (IOException e) ...{ // TODO Auto-generated catch block e.printStackTrace(); } } /** *//** * 列出当前工作目录下所有文件 */ public String[] ListAllFiles() ...{ String[] names=this.ListFiles("*"); return this.sort(names); } /** *//** * 列出指定工作目录下的匹配文件 * @param dir exp: /cim/ * @param file_regEx 通配符为* */ public String[] ListAllFiles(String dir,String file_regEx) ...{ String[] names=this.ListFiles(dir+file_regEx); return this.sort(names); } /** *//** * 列出匹配文件 * @param file_regEx 匹配字符,通配符为* */ public String[] ListFiles(String file_regEx) ...{ try ...{ /**//* FTPFile[] remoteFiles = ftpClient.listFiles(file_regEx); //System.out.println(remoteFiles.length); String[] name = new String[remoteFiles.length]; if(remoteFiles != null) { for(int i=0;i<remoteFiles.length;i++) { if(remoteFiles[i] == null) name[i] = ""; else if(remoteFiles[i].getName()==null||remoteFiles[i].getName().equals(".")||remoteFiles[i].getName().equals("..")) { name[i] = ""; } else name[i] = remoteFiles[i].getName(); System.out.println(name[i]); } } */ String[] name = ftpClient.listNames(file_regEx); if(name==null) return new String[0]; return this.sort(name); } catch (IOException e) ...{ // TODO Auto-generated catch block e.printStackTrace(); } return new String[0]; } public void Lists(String reg) ...{ try ...{ String[] a=ftpClient.listNames(reg); for(String b:a) ...{ System.out.println(b); } } catch (IOException e) ...{ // TODO Auto-generated catch block e.printStackTrace(); } } /** *//** * 设置传输文件的类型[文本文件或者二进制文件] * @param fileType--BINARY_FILE_TYPE,ASCII_FILE_TYPE */ public void setFileType(int fileType)...{ try...{ ftpClient.setFileType(fileType); }catch(IOException e)...{ e.printStackTrace(); } } /** *//** * 上传文件 * @param localFilePath--本地文件路径+文件名 * @param newFileName--新的文件名 */ public void uploadFile(String localFilePath,String newFileName)...{ //上传文件 BufferedInputStream buffIn=null; try...{ buffIn=new BufferedInputStream(new FileInputStream(localFilePath)); ftpClient.storeFile(newFileName, buffIn); }catch(Exception e)...{ e.printStackTrace(); }finally...{ try...{ if(buffIn!=null) buffIn.close(); }catch(Exception e)...{ e.printStackTrace(); } } } /** *//** * 下载文件(单个) * @param remoteFileName --服务器上的文件名 * @param localFileName--本地文件名 */ public String downloadFile(String remoteFileName,String localFileName)...{ BufferedOutputStream buffOut=null; try...{ buffOut=new BufferedOutputStream(new FileOutputStream(localFileName)); ftpClient.retrieveFile(remoteFileName, buffOut); }catch(Exception e)...{ e.printStackTrace(); return ""; }finally...{ try...{ if(buffOut!=null) buffOut.close(); }catch(Exception e)...{ e.printStackTrace(); } } return localFileName; } /** *//** * 关闭FTP连接 */ public void close() ...{ try...{ if(ftpClient!=null)...{ ftpClient.logout(); ftpClient.disconnect(); } }catch (Exception e)...{ e.printStackTrace(); } } /** *//** * 冒泡排序字符串(从大到小) */ public String[] sort(String[] str_Array) ...{ if(str_Array==null) ...{ throw new NullPointerException("The str_Array can not be null!"); } String tmp = ""; for(int i=0;i<str_Array.length;i++) ...{ for(int j=0;j<str_Array.length-i-1;j++) ...{ if(str_Array[j].compareTo(str_Array[j+1])<0) ...{ tmp = str_Array[j]; str_Array[j] = str_Array[j + 1]; str_Array[j + 1] = tmp; } } } return str_Array; } /** *//** * @param args */ public static void main(String[] args) ...{ // TODO Auto-generated method stub //String[] files = null; uFtp ftp = new uFtp("10.1.10.19",uFtp.defaultport,"eda","sinomos","/tyne_home/wat/db/",true); //uftp.ListFiles(); //ftp.changeDir("/tyne_home/wat/db/"); //String[] s = ftp.ListFiles("*SN_141*.wdf"); //System.out.println(s.length); ftp.Lists("SN_141.wdf"); //ftp.downloadFile("SN_141.wdf", "Data/SN_141.wdf"); /**//* System.out.println("=========================="); for(int i=0;i<files.length;i++) { System.out.println("files["+i+"]:"+files[i]); }*/ //uftp.uploadFile("D:/TestFile/temp.xml", "temp.xml"); } }

 

如果用的是中文的FTP服务器端,则要在Project中重载org.apache.commons.net.ftp.parser.UnixFTPEntryParser类

/**//** Copyright 2001-2005 The Apache Software Foundation** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package org.apache.commons.net.ftp.parser;

import java.text.ParseException;

import org.apache.commons.net.ftp.FTPClientConfig;import org.apache.commons.net.ftp.FTPFile;

/** *//*** Implementation FTPFileEntryParser and FTPFileListParser for standard Unix* Systems.* * This class is based on the logic of Daniel Savarese's DefaultFTPListParser,* but adapted to use regular expressions and to fit the new FTPFileEntryParser* interface.* * @version $Id: UnixFTPEntryParser.java,v 1.1 2007/01/18 04:20:59 others Exp $* @see org.apache.commons.net.ftp.FTPFileEntryParser FTPFileEntryParser (for*      usage instructions)*/public class UnixFTPEntryParser extends ConfigurableFTPFileEntryParserImpl ...{    /** *//**     * months abbreviations looked for by this parser. Also used to determine     * which month is matched by the parser     */    @SuppressWarnings("unused")    private static final String DEFAULT_MONTHS = "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)";

    static final String DEFAULT_DATE_FORMAT = "MMM d yyyy"; // Nov 9 2001

    static final String DEFAULT_RECENT_DATE_FORMAT = "MMM d HH:mm"; // Nov 9

    // 20:06

    static final String NUMERIC_DATE_FORMAT = "yyyy-MM-dd HH:mm"; // 2001-11-09

    // 20:06

    /** *//**     * Some Linux distributions are now shipping an FTP server which formats     * file listing dates in an all-numeric format:     * <code>"yyyy-MM-dd HH:mm</code>. This is a very welcome development,     * and hopefully it will soon become the standard. However, since it is so     * new, for now, and possibly forever, we merely accomodate it, but do not     * make it the default.     * <p>     * For now end users may specify this format only via     * <code>UnixFTPEntryParser(FTPClientConfig)</code>. Steve Cohen -     * 2005-04-17     */    public static final FTPClientConfig NUMERIC_DATE_CONFIG = new FTPClientConfig(            FTPClientConfig.SYST_UNIX, NUMERIC_DATE_FORMAT, null, null, null,            null);

    /** *//**     * this is the regular expression used by this parser.     *      * Permissions: r the file is readable w the file is writable x the file is     * executable - the indicated permission is not granted L mandatory locking     * occurs during access (the set-group-ID bit is on and the group execution     * bit is off) s the set-user-ID or set-group-ID bit is on, and the     * corresponding user or group execution bit is also on S undefined     * bit-state (the set-user-ID bit is on and the user execution bit is off) t     * the 1000 (octal) bit, or sticky bit, is on [see chmod(1)], and execution     * is on T the 1000 bit is turned on, and execution is off (undefined bit-     * state)     */    private static final String REGEX = "([bcdlfmpSs-])"            + "(((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-])))\+?\s+"            + "(\d+)\s+" + "(\S+)\s+" + "(?:(\S+)\s+)?" + "(\d+)\s+"

            /**//*             * numeric or standard format date             */            // + "((?:\d+[-/]\d+[-/]\d+)|(?:\S+\s+\S+))\s+"            // 2007/01/16 Yyong modify to match chinese date format            + "((?:\d+[-/]\d+[-/]\d+)|(?:\S+\s+\S+)|(?:\d+月\d+日))\s+"

            /**//*             * year (for non-recent standard format) or time (for numeric or             * recent standard format             */            + "(\d+(?::\d+)?)\s+"

            + "(\S*)(\s*.*)";

    /** *//**     * The default constructor for a UnixFTPEntryParser object.     *      * @exception IllegalArgumentException     *                Thrown if the regular expression is unparseable. Should     *                not be seen under normal conditions. It it is seen, this     *                is a sign that <code>REGEX</code> is not a valid regular     *                expression.     */    public UnixFTPEntryParser() ...{        this(null);    }

    /** *//**     * This constructor allows the creation of a UnixFTPEntryParser object with     * something other than the default configuration.     *      * @param config     *            The {@link FTPClientConfig configuration} object used to     *            configure this parser.     * @exception IllegalArgumentException     *                Thrown if the regular expression is unparseable. Should     *                not be seen under normal conditions. It it is seen, this     *                is a sign that <code>REGEX</code> is not a valid regular     *                expression.     * @since 1.4     */    public UnixFTPEntryParser(FTPClientConfig config) ...{        super(REGEX);        configure(config);    }

    /** *//**     * Parses a line of a unix (standard) FTP server file listing and converts     * it into a usable format in the form of an <code> FTPFile </code>     * instance. If the file listing line doesn't describe a file,     * <code> null </code> is returned, otherwise a <code> FTPFile </code>     * instance representing the files in the directory is returned.     * <p>     *      * @param entry     *            A line of text from the file listing     * @return An FTPFile instance corresponding to the supplied entry     */    public FTPFile parseFTPEntry(String entry) ...{        FTPFile file = new FTPFile();        file.setRawListing(entry);        int type;        boolean isDevice = false;

        if (matches(entry)) ...{            String typeStr = group(1);            String hardLinkCount = group(15);            String usr = group(16);            String grp = group(17);            String filesize = group(18);            String datestr = group(19) + " " + group(20);            String name = group(21);            String endtoken = group(22);

            try ...{                file.setTimestamp(super.parseTimestamp(datestr));            } catch (ParseException e) ...{                return null; // this is a parsing failure too.            }

            // bcdlfmpSs-            switch (typeStr.charAt(0)) ...{            case 'd':                type = FTPFile.DIRECTORY_TYPE;                break;            case 'l':                type = FTPFile.SYMBOLIC_LINK_TYPE;                break;            case 'b':            case 'c':                isDevice = true;                // break; - fall through            case 'f':            case '-':                type = FTPFile.FILE_TYPE;                break;            default:                type = FTPFile.UNKNOWN_TYPE;            }

            file.setType(type);

            int g = 4;            for (int access = 0; access < 3; access++, g += 4) ...{                // Use != '-' to avoid having to check for suid and sticky bits                file.setPermission(access, FTPFile.READ_PERMISSION, (!group(g)                        .equals("-")));                file.setPermission(access, FTPFile.WRITE_PERMISSION, (!group(                        g + 1).equals("-")));

                String execPerm = group(g + 2);                if (!execPerm.equals("-")                        && !Character.isUpperCase(execPerm.charAt(0))) ...{                    file                            .setPermission(access, FTPFile.EXECUTE_PERMISSION,                                    true);                } else ...{                    file.setPermission(access, FTPFile.EXECUTE_PERMISSION,                            false);                }            }

            if (!isDevice) ...{                try ...{                    file.setHardLinkCount(Integer.parseInt(hardLinkCount));                } catch (NumberFormatException e) ...{                    // intentionally do nothing                }            }

            file.setUser(usr);            file.setGroup(grp);

            try ...{                file.setSize(Long.parseLong(filesize));            } catch (NumberFormatException e) ...{                // intentionally do nothing            }

            if (null == endtoken) ...{                file.setName(name);            } else ...{                // oddball cases like symbolic links, file names                // with spaces in them.                name += endtoken;                if (type == FTPFile.SYMBOLIC_LINK_TYPE) ...{

                    int end = name.indexOf(" -> ");                    // Give up if no link indicator is present                    if (end == -1) ...{                        file.setName(name);                    } else ...{                        file.setName(name.substring(0, end));                        file.setLink(name.substring(end + 4));                    }

                } else ...{                    file.setName(name);                }            }            return file;        }        return null;    }

    /** *//**     * Defines a default configuration to be used when this class is     * instantiated without a {@link FTPClientConfig FTPClientConfig}     * parameter being specified.     *      * @return the default configuration for this parser.     */    protected FTPClientConfig getDefaultConfiguration() ...{        return new FTPClientConfig(FTPClientConfig.SYST_UNIX,                DEFAULT_DATE_FORMAT, DEFAULT_RECENT_DATE_FORMAT, null, null,                null);    }}

相关资源:FTP上傳使用commons-net
转载请注明原文地址: https://www.6miu.com/read-4979066.html

最新回复(0)