想為新作的Blog客戶端
易博增加FTP上傳的功能,最省地的方法當(dāng)然是利用JDK里的Socket類自己處理FTP的協(xié)議,雖然FTP不算是很復(fù)雜的協(xié)議,但是實(shí)現(xiàn)起來還是有點(diǎn)麻煩,容易出錯(cuò)。當(dāng)然不如使用現(xiàn)成的工具庫(kù)來得省事可靠。
Java World上有篇比較支持FTP協(xié)議的Java工具庫(kù)的文章,寫得很全面。
Java FTP client libraries reviewed粗略看了一邊,決定選擇
The Jakarta Project, Jakarta Commons/Net。Common Net是Jakarta Commons下的一個(gè)子項(xiàng)目,支持包括FTP在內(nèi)的多種Internet協(xié)議, 其他有比如Finger, Whois,Telnet,POP3等等。
Common Net支持FTP的關(guān)鍵類是org.apache.commons.net.ftp.FTPClient. 下面介紹一些具體的使用方法。
1. 使用FTPClient連接和登錄FTP服務(wù)器
- FTPClient ftp = new FTPClient();
- ftp.connect(server);
- ftp.login(username, password);
- System.out.println("Connected to " + server + ".");
- System.out.print(ftp.getReplyString());
類似使用ftp命令登錄FTP服務(wù)器以后,可以執(zhí)行各種命令比如cd和ls,可以調(diào)用FTPClient的函數(shù)比如FTPClient.changeWorkingDirectory(folder); 改變當(dāng)前目錄, FTPClient.listFiles()枚舉當(dāng)前目錄下的所有文件。
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服務(wù)器上取回一個(gè)文件。其實(shí)我更關(guān)心的是上傳的功能。
3. 使用FTPClient上傳文件
- FileInputStream fis = new FileInputStream(localFileName);
- ftp.storeFile(remoteFileName, fis);
和retrieveFile相對(duì)應(yīng)的storeFile上傳一個(gè)本地文件。完事后別忘了關(guān)閉FTPClient。
4. 關(guān)閉FTPClient
- ftp.logout();
- ftp.disconnect();
簡(jiǎn)潔起見,以上的代碼忽略了錯(cuò)誤處理。FTPClient還支持其他一些函數(shù),比如makeDirectory(String pathname) 在服務(wù)器上新建一個(gè)目錄。rename(String from, String to) 改變一個(gè)文件的名字。 具體的請(qǐng)參照Commons Net的API文檔。
易博客戶端介紹