• 用edtftpj实现Java FTP客户端工具


    edtftpj是一个java FTP工具包,使用非常方便,感觉比Apache的好用,但Apache更灵活。edtftpj有多种版本,分别是java、.net和js版本。对于Java版的有一个免费版本。我用的就是免费版本。其余的均为商业版本。

    为了开发,先下载免费版本的开发包。
    主  页:http://www.enterprisedt.com/
    工具包:http://www.enterprisedt.com/products/edtftpj/download/edtftpj.zip
    目前我用的是2.03。
     
    在开发FTP客户端工具之前,先看看其E文的开发指南:
    一、开发指南
     
    1、在开发中,最核心的API在两个类中,分别是:
     
    FileTransferClient  通过构建此对象来是进行FTP文件传输. 支持 "plain" FTP, i.e. RFC 959 FTP 
    FTPClient  功能和FileTransferClient一样,已经被废弃. 支持 "plain" FTP, i.e. RFC 959 FTP 
     
    2、连接一个FTP服务器
     
    1)、构建FileTransferClient对象
     FileTransferClient ftp = new FileTransferClient();
     
    2)、设置远程主机和用户认证
     ftp.setRemoteHost(host);
     ftp.setUserName(username);
     ftp.setPassword(password);
     ftp.setRemotePort(21);
     ftp.setTimeout(1200);
     
    3)、登录到服务器
     ftp.connect();
     
    4)、关闭连接
     ftp.disconnect();
     
    3、设置更多的连接属性
     
    1)、设置自动登录
     ftp.getAdvancedFTPSettings().setAutoLogin(false);
     
    2)、设置传输缓冲区
     ftp.getAdvancedSettings().setTransferBufferSize(1024)
     
    3)、设置获取服务器端信息时所使用的编码
     ftp.getAdvancedSettings().setControlEncoding("GBK");
     
    4)、设置传输通知的时间间隔
     ftp.getAdvancedSettings().setTransferNotifyInterval(5000);
    5)、其他的一些设置
     ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.ACTIVE);
     ftp.getAdvancedFTPSettings().setActivePortRange(61500, 61510);
     ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV);
     
    4、改变当前的工作目录
    1)、获取当前的ftp工作目录
     string directory = ftp.getRemoteDirectory();
    2)、改变当前的工作目录
     ftp.changeDirectory(directory);
    3)、改变当前的工作目录为其父目录
     ftp.changeToParentDirectory();
     
    5、上传与下载、暂停
    1)、上传
     ftp.uploadFile(java.lang.String localFileName, java.lang.String remoteFileName)
    2)、下载
     ftp.downloadFile(java.lang.String localFileName, java.lang.String remoteFileName)
    3)、暂停所有的传输
     ftp.cancelAllTransfers()
     
    当然,以上很多方法都有多中重载格式。下面给出一个简单封装的JavaFTP客户端工具:
     
    二、封装的客户端工具
    import com.enterprisedt.net.ftp.FTPException; 
    import com.enterprisedt.net.ftp.FTPFile; 
    import com.enterprisedt.net.ftp.FileTransferClient; 
    import com.enterprisedt.net.ftp.WriteMode; 
    import org.apache.commons.logging.Log; 
    import org.apache.commons.logging.LogFactory; 
    
    import java.io.File; 
    import java.io.IOException; 
    import java.text.ParseException; 
    
    /** 
    * edtftpj-2.0.3 工具简单封装测试 
    * 
    * @author leizhimin 2008-9-19 13:33:03 
    */ 
    public class FtpUtil { 
            private static Log log = LogFactory.getLog(FtpUtil.class); 
            private FileTransferClient client = null; 
    
            public static void main(String[] args) throws FTPException, IOException { 
                    FtpUtil ftp = new FtpUtil(); 
    //                ftp.connectServer(); 
                    File file = new File("C:\ooo\upx"); 
                    UploadListener listener = new UploadListener(ftp.client); 
                    ftp.ftpUploadFolder(file, listener); 
    
    
                    ftp.ftpDownload("c:\new1111.gif", "/upx/down.gif"); 
    
    
                    ftp.disconnect(); 
            } 
    
            public FtpUtil() { 
                    this.connectServer(); 
            } 
    
            public FileTransferClient getClient() { 
                    return client; 
            } 
    
            /** 
             * 连接ftp服务器 
             * 
             * @return 连接成功标识 
             */ 
            public boolean connectServer() { 
                    boolean flag = false; 
                    client = new FileTransferClient(); 
                    try { 
                            client.setUserName("admin"); 
                            client.setPassword("123"); 
                            client.setRemoteHost("localhost"); 
                            client.setRemotePort(21); 
                            client.setTimeout(1200); 
    
                            client.setEventListener(new UploadListener(client)); 
                            client.getAdvancedSettings().setTransferBufferSize(1000); 
                            client.getAdvancedSettings().setTransferNotifyInterval(5000); 
                            client.getAdvancedSettings().setControlEncoding("GBK"); 
                            client.connect(); 
                            flag = true; 
    
                    } catch (FTPException e) { 
                            e.printStackTrace(); 
                    } catch (IOException e) { 
                            e.printStackTrace(); 
                    } 
                    return flag; 
            } 
    
            /** 
             * 关闭FTP客户端连接 
             * 
             * @return 关闭成功标识 
             */ 
            public boolean disconnect() { 
                    boolean flag = false; 
                    try { 
                            client.disconnect(); 
                            flag = true; 
                    } catch (FTPException e) { 
                            e.printStackTrace(); 
                    } catch (IOException e) { 
                            e.printStackTrace(); 
                    } 
                    return flag; 
            } 
    
            /** 
             * 上传文件 
             * 
             * @param file 文件 
             * @param ul     监听器 
             */ 
            public void ftpUploadFile(File file, UploadListener ul) { 
                    String fileName = file.getName(); 
                    String filePath = file.getPath(); 
                    try { 
                            client.uploadFile(filePath, fileName, WriteMode.RESUME); 
                            int len = (int) client.getSize(fileName); 
                            log.info("上传文件" + filePath + "完成,大小为" + len + "字节!"); 
                    } catch (FTPException e) { 
                            e.printStackTrace(); 
                    } catch (IOException e) { 
                            e.printStackTrace(); 
                    } 
            } 
    
            /** 
             * 上传文件(夹) 
             * 
             * @param file 上传文件 
             * @param ul     上传监听器 
             */ 
            public void ftpUploadFolder(File file, UploadListener ul) { 
                    if (file.isFile()) { 
                            ftpUploadFile(file, ul); 
                    } 
                    try { 
                            if (file.isDirectory()) { 
                                    FTPFile[] ftpFiles = client.directoryList(); 
                                    boolean isExist = false; 
                                    //遍历FTP当前目录的文件文件名,如果存在则停止查找,如果不存在则设计标记为不存在 
                                    for (FTPFile ftpFile : ftpFiles) { 
                                            if (ftpFile.getName().equals(file.getName())) { 
                                                    isExist = true; 
                                                    break; 
                                            } 
                                    } 
                                    //如果要上传的目录不存在,则创建上传目录 
                                    if (!isExist) { 
                                            client.createDirectory(file.getName()); 
                                    } 
                                    //设置当前目录 
                                    client.changeDirectory(file.getName()); 
    
                                    //上传文件的列表 
                                    File[] upFiles = file.listFiles(); 
                                    for (File upFile : upFiles) { 
                                            if (upFile.isFile()) { 
                                                    ftpUploadFile(upFile, ul); 
                                            } else if (upFile.isDirectory()) { 
                                                    ftpUploadFolder(upFile, ul); 
                                            } 
                                    } 
                                    client.changeToParentDirectory(); 
                            } 
                    } catch (FTPException e) { 
                            e.printStackTrace(); 
                    } catch (IOException e) { 
                            e.printStackTrace(); 
                    } catch (ParseException e) { 
                            e.printStackTrace(); 
                    } 
            } 
    
            /** 
             * 下载文件 
             * 
             * @param localFileName    本地文件名 
             * @param remoteFileName 远程文件名 
             * @throws FTPException 
             * @throws IOException 
             */ 
            public void ftpDownload(String localFileName, String remoteFileName) throws FTPException, IOException { 
                    client.downloadFile(localFileName, remoteFileName, WriteMode.OVERWRITE); 
            } 
    }
    import com.enterprisedt.net.ftp.EventAdapter; 
    import com.enterprisedt.net.ftp.FileTransferClient; 
    
    /** 
    * 上传过程监听类 
    * 
    * @author leizhimin 2008-9-22 16:05:53 
    */ 
    class UploadListener extends EventAdapter { 
            private long bytesTransferred = 0; 
            private FileTransferClient ftpClient; 
    
            public UploadListener(FileTransferClient ftpClient) { 
                    this.ftpClient = ftpClient; 
            } 
    
            public void bytesTransferred(String connId, String remoteFilename, long bytes) { 
                    bytesTransferred = bytes; 
            } 
    }

    运行结果:

    2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
    信息: 上传文件C:oooupx11212.txt完成,大小为0字节! 
    2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
    信息: 上传文件C:oooupx11111.txt完成,大小为0字节! 
    2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
    信息: 上传文件C:oooupx11.txt完成,大小为0字节! 
    2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
    信息: 上传文件C:oooupx1新建 FDF Document.fdf完成,大小为0字节! 
    2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
    信息: 上传文件C:oooupx1新建 WinRAR 压缩文件.rar完成,大小为20字节! 
    2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
    信息: 上传文件C:oooupxaa.fdf完成,大小为0字节! 
    
    Process finished with exit code 0

    以上代码上传支持文件夹操作。

    本文转自:http://lavasoft.blog.51cto.com/62575/101108/

  • 相关阅读:
    spring之aop概念和配置
    netty概念
    maven使用实例记录
    maven概念
    Runtime.getRuntime().addShutdownHook
    aop前传之代理
    实例化bean的三种方式
    easyui datagrid treegrid 取消行选中、取消高亮
    sqlserver 保存 立方米(m³)
    sqlserver 备份集中的数据库备份与现有的 'XXX' 数据库不同。
  • 原文地址:https://www.cnblogs.com/dreammyle/p/4257014.html
Copyright © 2020-2023  润新知