zoukankan      html  css  js  c++  java
  • Ftp上传文件

    package net.util.common;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;
    import org.apache.commons.net.ftp.FTPSClient;
    
    /**
     * need commons-net-3.5.jar
     */
    public class FtpHelper {
    
        private String host;//ip地址
        private Integer port;//端口号
        private String userName;//用户名
        private String pwd;//密码
        //private String homePath;//aaa路径
        private String charSet = "utf-8";
        // 默认超时, 毫秒
        private long timeout = 30*1000;
    
        public FTPClient ftpClient = null;
    
        public FtpHelper(){
            init();
        }
        public FtpHelper(boolean ftps){
            init(ftps);
        }
    
        /**
         * ftp 初始化
         */
        public void init(){
            init(false);
        }
        public void init(boolean ftps){
            close();
            if(ftps==true){
                ftpClient = new FTPSClient(true);
            }
            else{
                ftpClient=new FTPClient();
            }
    
            // 默认编码
            ftpClient.setControlEncoding(charSet);
    
            //ftpClient.setBufferSize(524288);
            //ftpClient.enterLocalPassiveMode();
            // 毫秒计时
            ftpClient.setDefaultTimeout((int) timeout);
            ftpClient.setConnectTimeout((int) timeout);
            //ftpClient.setSoTimeout((int) timeout);
            //ftpClient.setDataTimeout(timeout);
        }
    
        /**
         * 获取ftp连接
         * @return
         * @throws Exception
         */
        public boolean connect(String host, Integer port, String userName, String pwd) throws Exception{
            this.host = host;
            this.port = port;
            this.userName= userName;
            this.pwd = pwd;
            return connect();
        }
        public boolean connect() throws Exception{
            boolean flag=false;
            int reply;
            if (port==null) {
                ftpClient.connect(host,21);
            }else{
                ftpClient.connect(host, port);
            }
    
            flag = ftpClient.login(userName, pwd);
            if(flag==false)
                return flag;
    
            // 服务器是否响应
            reply = ftpClient.getReplyCode();
            if (FTPReply.isPositiveCompletion(reply)==false) {
                flag = false;
                ftpClient.disconnect();
                return flag;
            }
    
            // 默认文件格式
            ftpClient.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
    
            return flag;
        }
    
        /**
         * 关闭ftp连接
         */
        public void close(){
            if (ftpClient==null || ftpClient.isConnected()==false) {
                ftpClient = null;
                return;
            }
            try {
                ftpClient.logout();
                ftpClient.disconnect();
            } catch (IOException e) {
                LogHelper.logger.warn("",e);
            }
            ftpClient = null;
        }
    
    
        /*
         * ftp 多种开关函数
         */
        public FTPClient getClient(){
            return ftpClient;
        }
        public void setControlEncoding(String encoding) {
            this.charSet = encoding;
            ftpClient.setControlEncoding(encoding);
        }
        public void enterLocalPassiveMode(){
            ftpClient.enterLocalPassiveMode();
        }
        public void enterLocalActiveMode(){
            ftpClient.enterLocalActiveMode();
        }
        // 毫秒计时
        public void setDefaultTimeout(int timeout) {
            ftpClient.setDefaultTimeout(timeout);
        }
        // 毫秒计时
    //    public void setConnectTimeout(int connectTimeout) {
    //        ftpClient.setConnectTimeout(connectTimeout);
    //    }
        // 毫秒计时
        public void setDataTimeout(int timeout) {
            ftpClient.setDataTimeout(timeout);
        }
        public void setBufferSize(int bufSize) {
            ftpClient.setBufferSize(bufSize);
        }
        /**
         * 传输格式
         * @param mode: FTPClient.BINARY_FILE_TYPE
         * @return
         * @throws IOException 
         */
        public boolean setFileTransferMode(int mode) throws IOException{
            return ftpClient.setFileTransferMode(mode);
        }
        /**
         * 文件格式
         * @param mode: FTPClient.BINARY_FILE_TYPE
         * @return
         * @throws IOException
         */
        public boolean setFileType(int mode) throws IOException {
            return ftpClient.setFileType(mode);
    
        }
        /*
         * ftp 多种开关函数
         */
    
    
        /**
         * ftp创建目录
         * @param path
         * @return
         * @throws IOException
         */
        public boolean createDir(String path) throws IOException{
            boolean bl = false;
            String pwd = "/";
            try {
                pwd = ftpClient.printWorkingDirectory();
            } catch (IOException e) {
                LogHelper.logger.warn("",e);
            }
            if(path.endsWith("/")==false){
                path = path + "/";
            }
            int fromIndex = 0;
            while(true){
                int start = path.indexOf("/", fromIndex);
                if(start<0)
                    break;
                fromIndex = start;
                String curPath = path.substring(0, fromIndex+1);
                //System.out.println(curPath);
                bl = ftpClient.changeWorkingDirectory(curPath);
                if(bl==false){
                    bl = ftpClient.makeDirectory(curPath);
                }
                if(bl==false)
                    break;
                fromIndex = fromIndex + 1;
            }
            ftpClient.changeWorkingDirectory(pwd);
            return bl;
        }
    
        /**
         * ftp上传文件或文件夹
         * @param srcPath: 本地目录或文件
         * @param dstPath: ftp目录或文件
         * @throws Exception
         */
        public void upload(String localPath, String ftpPath) throws Exception{
            File file = new File(localPath);
            if (file.isDirectory()) {
                createDir(ftpPath);
                String[] files=file.list();
                for(String fileName : files){
                    String subLocalPath = PathUtil.CombineUrl(localPath, fileName);
                    String subFtpPath = PathUtil.CombineUrl(ftpPath, fileName);
                    upload(subLocalPath, subFtpPath);
                }
            }
            else{
                FileInputStream localInput = null;
                try {
                    //ftpClient.enterLocalPassiveMode();
                    String dirPath = new File(ftpPath).getParent();
                    dirPath = dirPath.replace("\", "/");
                    createDir(dirPath);
                    localInput = new FileInputStream(file);
                    if(ftpClient.storeFile(ftpPath, localInput)==false){
                        LogHelper.logger.error("ftp upload file error: "+localPath);
                    }
                }
                catch (Exception e) {
                    LogHelper.logger.warn("",e);
                }
                finally{
                    try {
                        if(localInput!=null)
                            localInput.close();
                    } catch (Exception e) {}
                }
            }
        }
        /**
         * ftp单文件上传
         * @param localPath
         * @param ftpPath
         * @return
         */
        public boolean uploadFile(String localPath, String ftpPath){
            boolean bl = false;
            File file = new File(localPath);
            if (file.isFile()) {
                FileInputStream localInput = null;
                try {
                    //String tmpPath = ftpPath + ".tmp";
                    //ftpClient.enterLocalPassiveMode();
                    String dirPath = new File(ftpPath).getParent();
                    dirPath = dirPath.replace("\", "/");
                    createDir(dirPath);
                    localInput = new FileInputStream(file);
                    if(ftpClient.storeFile(ftpPath, localInput)==false){
                        bl = false;
                        LogHelper.logger.error("ftp upload file error: "+localPath);
                    }
                    else{
                        //bl = ftpClient.rename(tmpPath, ftpPath);
                        bl = true;
                    }
                }
                catch (Exception e) {
                    LogHelper.logger.warn("",e);
                }
                finally{
                    try {
                        if(localInput!=null)
                            localInput.close();
                    } catch (Exception e) {}
                }
            }
            return bl;
        }
    
        /**
         * ftp下载文件或目录
         * @param ftpPath: ftp远程目录或文件
         * @param localPath: 本地保存目录或文件
         * @param isFile: ftppath是文件或目录
         * @throws Exception
         */
        public void down(String ftpPath, String localPath, boolean isFile) throws Exception{
            if(isFile==true){
                FileOutputStream localFos = null;
                try {
                    //ftpClient.enterLocalPassiveMode();
                    String dirPath = new File(localPath).getParent();
                    FileUtil.createDir(dirPath);
                    File file = new File(localPath);
                    localFos = new FileOutputStream(file);
                    if(ftpClient.retrieveFile(ftpPath, localFos)==false){
                        LogHelper.logger.error("ftp down file error: "+ftpPath);
                    }
                }
                catch (Exception e) {
                    LogHelper.logger.warn("",e);
                }
                finally{
                    try {
                        if(localFos!=null)
                            localFos.close();
                    } catch (Exception e) {}
                }
            }
            // 目录处理
            else{
                FileUtil.createDir(localPath);
                FTPFile[] ftpFiles = ftpClient.listFiles(ftpPath);
                for (int j=0; j<ftpFiles.length; j++) {
                    FTPFile ftpFile = ftpFiles[j];
                    String subFtpPath = PathUtil.CombineUrl(ftpPath, ftpFile.getName());
                    String subLocalPath = PathUtil.CombineUrl(localPath, ftpFile.getName());
                    if(ftpFile.isFile()==true){
                        down(subFtpPath, subLocalPath, true);
                    }
                    else{
                        down(subFtpPath, subLocalPath, false);
                    }
                }
            }
        }
        /**
         * ftp单文件下载
         * @param ftpPath
         * @param localPath
         * @return
         */
        public boolean downFile(String ftpPath, String localPath) {
            boolean bl = false;
            FileOutputStream localFos = null;
            try {
                //ftpClient.enterLocalPassiveMode();
                FileUtil.createDir(localPath, true);
                File file = new File(localPath);
                localFos = new FileOutputStream(file);
                if(ftpClient.retrieveFile(ftpPath, localFos)==false){
                    LogHelper.logger.error("ftp down file error: "+ftpPath);
                }
                else{
                    bl = true;
                }
            }
            catch (Exception e) {
                LogHelper.logger.warn("",e);
            }
            finally{
                try {
                    if(localFos!=null)
                        localFos.close();
                } catch (Exception e) {}
            }
            return bl;
        }
    
    
        /**
         * 判断路径是否为ftp文件
         * @param ftpPath
         * @return
         * @throws IOException
         */
        public boolean isFile(String ftpPath) throws IOException{
            if(ftpPath==null || ftpPath.endsWith("/"))
                return false;
            File f = new File(ftpPath);
            String lastName = f.getName();
            String parentDir = f.getParent();
            // 根目录没有上层目录
            if(parentDir==null)
                return false;
            FTPFile[] ftpFiles = ftpClient.listFiles(parentDir);
            for (int j=0; j<ftpFiles.length; j++) {
                FTPFile ftpFile = ftpFiles[j];
                if(ftpFile.isFile()==true && lastName.equals(ftpFile.getName())){
                    return true;
                }
            }
            return false;
        }
        /**
         * 判断路径是否为ftp目录
         * @param ftpPath
         * @return
         * @throws IOException
         */
        public boolean isDir(String ftpPath) throws IOException{
            if(ftpPath==null)
                return false;
            File f = new File(ftpPath);
            String lastName = f.getName();
            String parentDir = f.getParent();
            // 根目录没有上层目录
            if(parentDir==null)
                return true;
            FTPFile[] ftpFiles = ftpClient.listFiles(parentDir);
            for (int j=0; j<ftpFiles.length; j++) {
                FTPFile ftpFile = ftpFiles[j];
                if(ftpFile.isDirectory()==true && lastName.equals(ftpFile.getName())){
                    return true;
                }
            }
            return false;
        }
        public boolean isDirB(String ftpPath) {
            String cwd = "/";
            try {
                cwd = ftpClient.printWorkingDirectory();
            } catch (IOException e) {
                LogHelper.logger.warn("",e);
            }
            try {
                boolean isDir = ftpClient.changeWorkingDirectory(ftpPath);
                ftpClient.changeWorkingDirectory(cwd);
                return isDir;
            }catch (IOException e) {}
            return false;
        }
    
        /**
         * 返回指定目录文件列表(包括子目录)
         * @param ftpPath: ftp文件夹目录, 不能传文件
         * @return
         * @throws Exception
         */
        public List<String> listFtpFiles(String ftpPath) throws Exception{
            List<String> list = new ArrayList<String>();
            FTPFile[] ftpFiles = ftpClient.listFiles(ftpPath);
            for (int j=0; j<ftpFiles.length; j++) {
                FTPFile ftpFile = ftpFiles[j];
                String subFtpPath = PathUtil.CombineUrl(ftpPath, ftpFile.getName());
                if(ftpFile.isFile()==true){
                    list.add(subFtpPath);
                }
                else{
                    List<String> subList = listFtpFiles(subFtpPath);
                    list.addAll(subList);
                }
            }
            return list;
        }
        /**
         * 返回当前目录文件列表
         * @param ftpPath
         * @return
         * @throws IOException
         */
        public FTPFile[] listFiles(String ftpPath) throws IOException{
            return ftpClient.listFiles(ftpPath);
        }
        /**
         * ftp修改文件名
         * @param from
         * @param to
         * @return
         */
        public boolean rename(String from, String to){
            boolean bl = false;
            try {
                bl = ftpClient.rename(from, to);
            } catch (IOException e) {
                LogHelper.logger.warn("",e);
            }
            return bl;
        }
        /**
         * 删除文件
         * @param ftpPath
         * @return
         */
        public boolean deleteFile(String ftpPath){
            boolean bl = false;
            try {
                bl = ftpClient.deleteFile(ftpPath);
            } catch (IOException e) {
                LogHelper.logger.warn("",e);
            }
            return bl;
        }
    
    
        public void test() throws Exception{
            //down("/tt/ss/msgutil.zip.tmp", "/root/Desktop/tmp/", true);
            down("/tt", "/root/Desktop/tmp/", false);
            ftpClient.rename("from", "to");
            FTPFile[] files = ftpClient.listFiles("");
            for(FTPFile ff : files){
                System.out.println(ff.getName());
                System.out.println(ff.getLink());
            }
            System.out.println(files);
        }
    
        // test
        public static void main(String[] args) throws Exception {
    
            //FtpHelper fh = new FtpHelper("192.169.126.100",21,"yfsb","inet-eyed20");
            FtpHelper fh = new FtpHelper();
            boolean bl = fh.connect("172.16.9.101",21,"test1","111");
            System.out.println("connect: "+bl);
    
            List<String> list = fh.listFtpFiles("/");
            fh.uploadFile("C:/Users/wang/Desktop/testftp/tiedel.zip", "/tiedel.zip.tmp");
            fh.deleteFile("/tiedel.zip");
            bl = fh.rename("/tiedel.zip.tmp", "/tiedel.zip");
            bl = fh.isFile("/33");
            bl = fh.isDir("/tiedel.zip");
            //fh.down("/p1/fp", "C:/Users/wang/Desktop/testftp22/tmp", false);
            //fh.test();
            //bl = fh.createDir("/p1/p2/p3/p4/p5");
            //fh.upload("/root/Desktop/friendxml0.txt");
            //fh.upload("/root/Desktop/123", "/tt/ss2/");
            System.out.println(bl);
        }
    
    
    }
    
  • 相关阅读:
    StopAllSounds
    GotoAndPlay
    区间(interval)
    因数(factor)
    [HAOI2009]逆序对数列
    生物分子gene
    数轴line
    [SCOI2008]配对
    精力(power)
    bzoj4987: Tree(树形dp)
  • 原文地址:https://www.cnblogs.com/nicebaby/p/7419142.html
Copyright © 2011-2022 走看看