推薦一個java操作ftp的工具類
阿新 • • 發佈:2018-12-08
寫在前面
作為經常使用電腦整理檔案的童鞋,應該都使用過從ftp伺服器上傳下載檔案,那麼今天就瞭解下如何通過java程式操作ftp服務的檔案
首先你要知道ftp的ip,路徑,埠,有操作許可權的賬號和密碼
1 匯入jar包
commons-net-3.6.jar
這個jar包用來設定編碼,經過測試,不加也可用
2 工具類中主要方法
2.1 登陸ftp
/** * 驗證登入 * @param ip * @param port * @param name * @param pwd * @return */ public boolean login(String ip,int port, String name, String pwd) { try { ftp = new FTPClient(); ftp.connect(ip, port); System.out.println(ftp.login(name, pwd)); if(!ftp.login(name, pwd)){ return false; } ftp.setCharset(Charset.forName("UTF-8")); ftp.setControlEncoding("UTF-8"); } catch (IOException e) { e.printStackTrace(); return false; } return true; }
注意:獲取遠端檔案目錄,上傳和下載方法基於登陸方法
2.2 獲取遠端檔案目錄
/** * 獲取ftp某一檔案(路徑)下的檔名字,用於檢視檔案列表 * @param ip * @param port * @param name * @param pwd * @param remotedir 遠端地址目錄 * @return */ public boolean getFilesName(String ip,int port, String name, String pwd, String remotedir) { try { if(!login(ip, port, name, pwd)){ return false; } //獲取ftp裡面,指定資料夾 裡面的檔名字,存入陣列中 FTPFile[] files = ftp.listFiles(remotedir); //打印出ftp裡面,指定資料夾 裡面的檔名字 for (int i = 0; i < files.length; i++) { System.out.println(files[i].getName()); } } catch (IOException e) { e.printStackTrace(); return false; }finally{ this.close(); } return true; }
2.3 上傳檔案
/** * 上傳檔案 方法一 * @param ip * @param port * @param name * @param pwd * @param remotepath 遠端地址檔案路徑 * @param localpath 本地檔案路徑 * @return */ public boolean putFileOne(String ip,int port, String name, String pwd,String remotepath,String localpath) { try { if(!login(ip, port, name, pwd)){ return false; } //將本地的 localpath 檔案上傳到ftp的根目錄資料夾下面,並重命名為 remotepath中的名字 return ftp.storeFile(remotepath, new FileInputStream(new File(localpath))); } catch (IOException e) { e.printStackTrace(); return false; }finally{ this.close(); } } /** * 上傳檔案的第二種方法,優化了傳輸速度 * @param ip * @param port * @param name * @param pwd * @param remotepath 遠端地址檔案路徑 * @param localpath 本地檔案路徑 * @return */ public boolean putFileTwo(String ip,int port, String name, String pwd,String remotepath,String localpath) { try { if(!login(ip, port, name, pwd)){ return false; } os = ftp.storeFileStream(remotepath); fis = new FileInputStream(new File(localpath)); byte[] b = new byte[1024]; int len = 0; while ((len = fis.read(b)) != -1) { os.write(b,0,len); } } catch (IOException e) { e.printStackTrace(); return false; }finally { this.close(); } return true; }
2.4 下載檔案
/**
* 下載檔案 方法一
* @param ip
* @param port
* @param name
* @param pwd
* @param remotepath 遠端地址檔案路徑
* @param localpath 本地檔案路徑
* @return
*/
public boolean getFileOne(String ip,int port, String name, String pwd,String remotepath,String localpath) {
try {
if(!login(ip, port, name, pwd)){
return false;
}
//將ftp資源中 remotepath 檔案下載到本地目錄資料夾下面,並重命名為 localpath 中的名字
return ftp.retrieveFile(remotepath, new FileOutputStream(new File(localpath)));
} catch (IOException e) {
e.printStackTrace();
return false;
}finally{
this.close();
}
}
/**
* 下載檔案的第二種方法,優化了傳輸速度
* @param ip
* @param port
* @param name
* @param pwd
* @param remotepath 遠端地址檔案路徑
* @param localpath 本地檔案路徑
* @return
*/
public boolean getFileTwo(String ip,int port, String name, String pwd,String remotepath,String localpath) {
try {
if(!login(ip, port, name, pwd)){
return false;
}
is = ftp.retrieveFileStream(remotepath);
fos = new FileOutputStream(new File(localpath));
byte[] b = new byte[1024];
int len = 0;
while ((len = is.read(b)) != -1) {
fos.write(b,0,len);
}
} catch (IOException e) {
e.printStackTrace();
return false;
}finally {
this.close();
}
return true;
}
3 原始碼
當然上面程式碼只是重要的部分,如果有問題可去github自行下載 charmsongo
如果有什麼更好的方法歡迎留言