為了實(shí)現(xiàn)一個(gè)從FTP地址批量下載文件的功能夯巷,使用了comment-net.jar包各聘。
主要實(shí)現(xiàn)代碼
- 獲得FTP鏈接片效,返回FTPClient類的方法
/**
* 獲得FTP客戶端
* @param hostName 主機(jī)名稱
* @param username 用戶賬號(hào)
* @param password 密碼
* @return FTPClient引用
*/
public static FTPClient getFTPClient(String hostName, String username , String password,int port){
FTPClient ftpClient = new FTPClient();
port = port == 0 ?21:port; //port默認(rèn)值21
try {
ftpClient.connect(hostName,port);
ftpClient.login(username, password);
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
System.err.println("未連接到FTP禁筏,用戶名或密碼錯(cuò)誤荸型。");
ftpClient.disconnect();
} else {
ftpClient.setControlEncoding("UTF-8");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//二進(jìn)制文件類型
ftpClient.enterLocalPassiveMode();
System.out.println("FTP連接成功繁涂。");
}
} catch (IOException e) {
e.printStackTrace();
System.err.println("ip地址可能出錯(cuò)");
}
return ftpClient;
}
- 下載文件的方法
public static void downloadFtpFile(FTPClient ftpClient,String ftpFilePath,String localPath,String ftpFileName,String localNewFileName){
try {
ftpClient.changeWorkingDirectory(ftpFilePath.trim());//選擇路徑
OutputStream os = new FileOutputStream((localPath+File.separator+localNewFileName).trim());
System.out.println("正在訪問FTP路徑:"+ftpClient.printWorkingDirectory()+"下載文件["+ftpFileName+"] 到["+localPath+"]");//打印當(dāng)前路徑
ftpClient.retrieveFile(ftpFileName,os);
ftpClient.changeToParentDirectory();
ftpClient.changeToParentDirectory();
os.close();
} catch (IOException e) {
System.err.println("保存文件出錯(cuò)");
e.printStackTrace();
}
}
需要注意的是
- ftp的路徑使用的路徑分隔是 /
- 在下載文件過程中要切換路徑拱她,我一開始直接調(diào)用了
boolean changeWorkingDirectory(String pathname)
方法,無效。
查看文檔扔罪,選擇了changeToParentDirectory()
方法秉沼,無效】蠼停看了網(wǎng)上其他人的說明之后唬复,調(diào)用2次changeToParentDirectory()
才可以切換到根目錄。