想為新作的Blog客戶端
易博增加FTP上傳的功能,最省地的方法當然是利用JDK里的Socket類自己處理FTP的協議,雖然FTP不算是很復雜的協議,但是實現起來還是有點麻煩,容易出錯。當然不如使用現成的工具庫來得省事可靠。
Java World上有篇比較支持FTP協議的Java工具庫的文章,寫得很全面。
Java FTP client libraries reviewed粗略看了一邊,決定選擇
The Jakarta Project, Jakarta Commons/Net。Common Net是Jakarta Commons下的一個子項目,支持包括FTP在內的多種Internet協議, 其他有比如Finger, Whois,Telnet,POP3等等。
Common Net支持FTP的關鍵類是org.apache.commons.net.ftp.FTPClient. 下面介紹一些具體的使用方法。
1. 使用FTPClient連接和登錄FTP服務器
- FTPClient ftp = new FTPClient();
- ftp.connect(server);
- ftp.login(username, password);
- System.out.println("Connected to " + server + ".");
- System.out.print(ftp.getReplyString());
類似使用ftp命令登錄FTP服務器以后,可以執行各種命令比如cd和ls,可以調用FTPClient的函數比如FTPClient.changeWorkingDirectory(folder); 改變當前目錄, FTPClient.listFiles()枚舉當前目錄下的所有文件。
2. 使用FTPClient下載文件
- FTPFile[] files = ftp.listFiles();
- System.out.println("Number of files in dir: " + files.length);
- for (int i = 0; i < files.length; i++) {
- File file = new File(destinationFolder + File.separator
- + files[i].getName());
- FileOutputStream fos = new FileOutputStream(file);
- ftp.retrieveFile(files[i].getName(), fos);
- fos.close();
- file.setLastModified(fileDate.getTime());
- }
FTPClient.retrieveFile從FTP服務器上取回一個文件。其實我更關心的是上傳的功能。
3. 使用FTPClient上傳文件
- FileInputStream fis = new FileInputStream(localFileName);
- ftp.storeFile(remoteFileName, fis);
和retrieveFile相對應的storeFile上傳一個本地文件。完事后別忘了關閉FTPClient。
4. 關閉FTPClient
- ftp.logout();
- ftp.disconnect();
簡潔起見,以上的代碼忽略了錯誤處理。FTPClient還支持其他一些函數,比如makeDirectory(String pathname) 在服務器上新建一個目錄。rename(String from, String to) 改變一個文件的名字。 具體的請參照Commons Net的API文檔。
易博客戶端介紹