java下載、上傳、刪除ftp(FTPclient,適用JDK7以及linux下的ftp)
阿新 • • 發佈:2019-02-08
java下載、上傳、刪除ftp,使用org.apache.commons.net.ftp.FTPClient採用被動傳輸,之前使用sun.net.ftp.FtpClient上傳(點選開啟連結)但在jdk7下使用報錯,因此這裡使用FTPClient進行FTP操作,能夠適用JDK1.7 以及 linux vsftpd的情況。
使用的包為commons-net-1.4.1.jar
package muyunfei.ftpDemo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.SocketException; import org.apache.commons.net.ftp.FTPClient; /** * * @author muyunfei 牟雲飛 * */ public class FTPUtil { public static void main(String[] args) { FTPUtil util = new FTPUtil(); // //上傳 // File localFile=new File("G:\\photo2222222222222.png"); // try { // boolean flag=util.uploadFile(localFile, "muyunfei.png"); // System.out.println(flag +" 判斷上傳結果"); // } catch (SocketException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } //下載 File localFile=new File("G:\\APP-release.apk"); try { localFile.createNewFile(); boolean flag=util.downloadFile("APP-release.apk",localFile); System.out.println(flag +" 判斷下載結果"); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //刪除 // try { // boolean flag=util.deleteFile("muyunfei.png"); // System.out.println(flag +" 判斷刪除結果"); // } catch (SocketException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } } public static String ftpHost; public static int port; public static String userName; public static String passWord; public static String path; //ftp下哪個目錄------------------ public static String ftpEncode; public static int defaultTimeout; /** * 靜態塊,初始化ftp資料 */ static{ try{ ftpHost = "192.168.21.114";//linux //ftpHost = "192.168.1.103";//windows port = 21; userName = "test"; passWord = "111111"; path = "ev_ftp"; //ftp下哪個目錄------------------ ftpEncode="UTF-8"; defaultTimeout = 30000; }catch(Exception e){ e.printStackTrace(); } } /** * 上傳ftp * @param localFile * @param fileNewName * @return * @throws SocketException * @throws IOException */ public boolean uploadFile(File localFile,String fileNewName) throws SocketException, IOException{ boolean flag=true; //獲得檔案流 FileInputStream is=new FileInputStream(localFile); //儲存至Ftp FTPClient ftpClient = new FTPClient();// ftpHost為FTP伺服器的IP地址,port為FTP伺服器的登陸埠,ftpHost為String型,port為int型。 ftpClient.setControlEncoding(ftpEncode); // 中文支援 ftpClient.connect(ftpHost); ftpClient.login(userName, passWord);// userName、passWord分別為FTP伺服器的登陸使用者名稱和密碼 ftpClient.setDefaultPort(port); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); // 用被動模式傳輸,解決linux服務長時間等待,導致超時問題 ftpClient.setDefaultTimeout(defaultTimeout);// 設定預設超時時間 ftpClient.setBufferSize(1024*1024);//設定快取區,預設緩衝區大小是1024,也就是1K //切換目錄,目錄不存在建立目錄 boolean chagenDirFlag=ftpClient.changeWorkingDirectory(path); if(chagenDirFlag==false){ ftpClient.makeDirectory(path); ftpClient.changeWorkingDirectory(path); } //生成新的ftp檔名 // SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); // Date curDate = new Date(); // String newFileName = fileName.substring(0, fileName.indexOf(".zip"))+sdf.format(curDate)+".zip"; String newFileName = fileNewName; //上傳至Ftp flag=ftpClient.storeFile(newFileName, is); is.close(); //關閉連線 ftpClient.logout(); ftpClient.disconnect(); if(true==flag){ System.out.println(fileNewName+"上傳圖片成功"); }else{ System.out.println(fileNewName+"上傳圖片失敗......."); } System.out.println("FTP檔名——"+newFileName); return flag; } /** * 下載FTP * @param ftpName ftp上的檔名 * @param localFile 儲存的本地地址 * @return * @throws SocketException * @throws IOException */ public boolean downloadFile(String ftpName,File localFile) throws SocketException, IOException{ boolean flag=true; //儲存至Ftp FTPClient ftpClient = new FTPClient();// ftpHost為FTP伺服器的IP地址,port為FTP伺服器的登陸埠,ftpHost為String型,port為int型。 ftpClient.setControlEncoding(ftpEncode); // 中文支援 ftpClient.connect(ftpHost); ftpClient.login(userName, passWord);// userName、passWord分別為FTP伺服器的登陸使用者名稱和密碼 ftpClient.setDefaultPort(port); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); // 用被動模式傳輸,解決linux服務長時間等待,導致超時問題 ftpClient.setDefaultTimeout(defaultTimeout);// 設定預設超時時間 ftpClient.setBufferSize(1024*1024);//設定快取區,預設緩衝區大小是1024,也就是1K //切換目錄,目錄不存在建立目錄 boolean chagenDirFlag=ftpClient.changeWorkingDirectory(path); if(chagenDirFlag==false){ System.out.println("ftp上目錄切換失敗"); return false; } OutputStream os = new FileOutputStream(localFile); flag = ftpClient.retrieveFile(ftpName, os); if(true==flag){ System.out.println(ftpName+" 檔案下載成功"); }else{ System.out.println(ftpName+" 檔案下載失敗"); } os.flush(); os.close(); //關閉連線 ftpClient.logout(); ftpClient.disconnect(); System.out.println("FTP檔名——"+ftpName); return flag; } /** * 刪除FTP * @param ftpName ftp上的檔名 * @param localFile 儲存的本地地址 * @return * @throws SocketException * @throws IOException */ public boolean deleteFile(String ftpName) throws SocketException, IOException{ boolean flag=true; //儲存至Ftp FTPClient ftpClient = new FTPClient();// ftpHost為FTP伺服器的IP地址,port為FTP伺服器的登陸埠,ftpHost為String型,port為int型。 ftpClient.setControlEncoding(ftpEncode); // 中文支援 ftpClient.connect(ftpHost); ftpClient.login(userName, passWord);// userName、passWord分別為FTP伺服器的登陸使用者名稱和密碼 ftpClient.setDefaultPort(port); ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); // 用被動模式傳輸,解決linux服務長時間等待,導致超時問題 ftpClient.setDefaultTimeout(defaultTimeout);// 設定預設超時時間 //切換目錄,目錄不存在建立目錄 boolean chagenDirFlag=ftpClient.changeWorkingDirectory(path); if(chagenDirFlag==false){ System.out.println("ftp上目錄切換失敗"); return false; } flag = ftpClient.deleteFile(ftpName); if(true==flag){ System.out.println(ftpName+" 檔案刪除成功"); }else{ System.out.println(ftpName+" 檔案刪除失敗"); } //關閉連線 ftpClient.logout(); ftpClient.disconnect(); System.out.println("FTP檔名——"+ftpName); return flag; } }