JAVA技巧完成上傳下載文件到FTP辦事器(完全)。本站提示廣大學習愛好者:(JAVA技巧完成上傳下載文件到FTP辦事器(完全))文章只能為提供參考,不一定能成為您想要的結果。以下是JAVA技巧完成上傳下載文件到FTP辦事器(完全)正文
詳細具體引見請看下文:
在應用文件停止交互數據的運用來講,應用FTP辦事器是一個很好的選擇。本文應用Apache Jakarta Commons Net(commons-net-3.3.jar) 基於FileZilla Server辦事器完成FTP辦事器上文件的上傳/下載/刪除等操作。
關於FileZilla Server辦事器的具體搭建設置裝備擺設進程,概況請見 FileZilla Server裝置設置裝備擺設教程 。之前有同伙說,上傳年夜文件(幾百M以上的文件)到FTP辦事器時會重現沒法重定名的成績,但自己親測上傳2G的文件到FileZilla Server都沒有該成績,同伙們可以寧神應用該代碼。
FavFTPUtil.Java package com.favccxx.favsoft.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; public class FavFTPUtil { /** * 上傳文件(可供Action/Controller層應用) * @param hostname FTP辦事器地址 * @param port FTP辦事器端標語 * @param username FTP登錄帳號 * @param password FTP登錄暗碼 * @param pathname FTP辦事器保留目次 * @param fileName 上傳到FTP辦事器後的文件稱號 * @param inputStream 輸出文件流 * @return */ public static boolean uploadFile(String hostname, int port, String username, String password, String pathname, String fileName, InputStream inputStream){ boolean flag = false; FTPClient ftpClient = new FTPClient(); ftpClient.setControlEncoding("UTF-8"); try { //銜接FTP辦事器 ftpClient.connect(hostname, port); //登錄FTP辦事器 ftpClient.login(username, password); //能否勝利登錄FTP辦事器 int replyCode = ftpClient.getReplyCode(); if(!FTPReply.isPositiveCompletion(replyCode)){ return flag; } ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.makeDirectory(pathname); ftpClient.changeWorkingDirectory(pathname); ftpClient.storeFile(fileName, inputStream); inputStream.close(); ftpClient.logout(); flag = true; } catch (Exception e) { e.printStackTrace(); } finally{ if(ftpClient.isConnected()){ try { ftpClient.disconnect(); } catch (IOException e) { e.printStackTrace(); } } } return flag; } /** * 上傳文件(可對文件停止重定名) * @param hostname FTP辦事器地址 * @param port FTP辦事器端標語 * @param username FTP登錄帳號 * @param password FTP登錄暗碼 * @param pathname FTP辦事器保留目次 * @param filename 上傳到FTP辦事器後的文件稱號 * @param originfilename 待上傳文件的稱號(相對地址) * @return */ public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String filename, String originfilename){ boolean flag = false; try { InputStream inputStream = new FileInputStream(new File(originfilename)); flag = uploadFile(hostname, port, username, password, pathname, filename, inputStream); } catch (Exception e) { e.printStackTrace(); } return flag; } /** * 上傳文件(弗成以停止文件的重定名操作) * @param hostname FTP辦事器地址 * @param port FTP辦事器端標語 * @param username FTP登錄帳號 * @param password FTP登錄暗碼 * @param pathname FTP辦事器保留目次 * @param originfilename 待上傳文件的稱號(相對地址) * @return */ public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String originfilename){ boolean flag = false; try { String fileName = new File(originfilename).getName(); InputStream inputStream = new FileInputStream(new File(originfilename)); flag = uploadFile(hostname, port, username, password, pathname, fileName, inputStream); } catch (Exception e) { e.printStackTrace(); } return flag; } /** * 刪除文件 * @param hostname FTP辦事器地址 * @param port FTP辦事器端標語 * @param username FTP登錄帳號 * @param password FTP登錄暗碼 * @param pathname FTP辦事器保留目次 * @param filename 要刪除的文件稱號 * @return */ public static boolean deleteFile(String hostname, int port, String username, String password, String pathname, String filename){ boolean flag = false; FTPClient ftpClient = new FTPClient(); try { //銜接FTP辦事器 ftpClient.connect(hostname, port); //登錄FTP辦事器 ftpClient.login(username, password); //驗證FTP辦事器能否登錄勝利 int replyCode = ftpClient.getReplyCode(); if(!FTPReply.isPositiveCompletion(replyCode)){ return flag; } //切換FTP目次 ftpClient.changeWorkingDirectory(pathname); ftpClient.dele(filename); ftpClient.logout(); flag = true; } catch (Exception e) { e.printStackTrace(); } finally{ if(ftpClient.isConnected()){ try { ftpClient.logout(); } catch (IOException e) { } } } return flag; } /** * 下載文件 * @param hostname FTP辦事器地址 * @param port FTP辦事器端標語 * @param username FTP登錄帳號 * @param password FTP登錄暗碼 * @param pathname FTP辦事器文件目次 * @param filename 文件稱號 * @param localpath 下載後的文件途徑 * @return */ public static boolean downloadFile(String hostname, int port, String username, String password, String pathname, String filename, String localpath){ boolean flag = false; FTPClient ftpClient = new FTPClient(); try { //銜接FTP辦事器 ftpClient.connect(hostname, port); //登錄FTP辦事器 ftpClient.login(username, password); //驗證FTP辦事器能否登錄勝利 int replyCode = ftpClient.getReplyCode(); if(!FTPReply.isPositiveCompletion(replyCode)){ return flag; } //切換FTP目次 ftpClient.changeWorkingDirectory(pathname); FTPFile[] ftpFiles = ftpClient.listFiles(); for(FTPFile file : ftpFiles){ if(filename.equalsIgnoreCase(file.getName())){ File localFile = new File(localpath + "/" + file.getName()); OutputStream os = new FileOutputStream(localFile); ftpClient.retrieveFile(file.getName(), os); os.close(); } } ftpClient.logout(); flag = true; } catch (Exception e) { e.printStackTrace(); } finally{ if(ftpClient.isConnected()){ try { ftpClient.logout(); } catch (IOException e) { } } } return flag; } } FavFTPUtilTest.java package com.favccxx.favsoft.util; import junit.framework.TestCase; public class FavFTPTest extends TestCase { public void testFavFTPUtil(){ String hostname = "127.0.0.1"; int port = 21; String username = "business"; String password = "business"; String pathname = "business/ebook"; String filename = "big.rar"; String originfilename = "C:\\Users\\Downloads\\Downloads.rar"; FavFTPUtil.uploadFileFromProduction(hostname, port, username, password, pathname, filename, originfilename); // String localpath = "D:/"; // FavFTPUtil.downloadFile(hostname, port, username, password, pathname, filename, localpath); } }
以上就是JAVA經由過程FTP上傳下載文件的完全代碼,願望對年夜家有所贊助。