edtftp實現FTP開發

用edtftpj實現Java FTP客戶端工具
 
edtftpj是一個java FTP工具包,使用非常方便,感覺比Apache的好用,但Apache更靈活。edtftpj有多種版本,分別是java、.net和js版本。對於Java版的有一個免費版本。我用的就是免費版本。其餘的均爲商業版本。
 
爲了開發,先下載免費版本的開發包。
目前我用的是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)、設置遠程主機和用戶認證
 
 
3)、登錄到服務器
 
4)、關閉連接
 
 
3、設置更多的連接屬性
 
1)、設置自動登錄
 
2)、設置傳輸緩衝區
 
3)、設置獲取服務器端信息時所使用的編碼
 
4)、設置傳輸通知的時間間隔
5)、其他的一些設置
 
4、改變當前的工作目錄
1)、獲取當前的ftp工作目錄
 string directory = ftp.getRemoteDirectory();
2)、改變當前的工作目錄
3)、改變當前的工作目錄爲其父目錄
 
5、上傳與下載、暫停
1)、上傳
 ftp.uploadFile(java.lang.String localFileName, java.lang.String remoteFileName)
2)、下載
 ftp.downloadFile(java.lang.String localFileName, java.lang.String remoteFileName)
3)、暫停所有的傳輸
 
當然,以上很多方法都有多中重載格式。下面給出一個簡單封裝的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:\ooo\upx\1\12\12.txt完成,大小爲0字節! 
2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
信息: 上傳文件C:\ooo\upx\1\11\11.txt完成,大小爲0字節! 
2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
信息: 上傳文件C:\ooo\upx\1\1.txt完成,大小爲0字節! 
2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
信息: 上傳文件C:\ooo\upx\1\新建 FDF Document.fdf完成,大小爲0字節! 
2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
信息: 上傳文件C:\ooo\upx\1\新建 WinRAR 壓縮文件.rar完成,大小爲20字節! 
2008-9-22 17:45:48 zzvcom.cms.ccm.jmkws.common.FtpUtil ftpUploadFile 
信息: 上傳文件C:\ooo\upx\aa.fdf完成,大小爲0字節! 

Process finished with exit code 0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章