日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java上传文件到FTP服务器

發布時間:2023/12/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java上传文件到FTP服务器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎來到小生的博客,各種工具類,常用知識點、技巧持續更新中。。。。。。。
感謝大家點贊關注,希望大家能夠給小生更多的支持。
祝您閱讀愉快!
有任何疑問可以加小生QQ群咨詢:107680366

前段時間,項目中使用到了上傳文件到FTP服務器,再此略作整理,形成一個util工具,方便日后使用。
項目代碼已上傳至github:https://github.com/hack-feng/ftpdemo.git
點擊直接前往

其中部分生成規則可以根據實際業務進行修改,刪除

首先定義一個FTP服務器和上傳文件的基礎信息
封裝一個FtpBean.java實體類

public class FtpBean {/*** 部分信息如果傳空的話,默認賦值,根據業務需求修改*///FTP服務器地址private String address;//FTP服務器端口號private String port;//FTP服務器用戶名private String username;//FTP服務器密碼private String password;//上傳文件名稱private String fileName;//基本路徑private String basepath;//文件輸入流private InputStream inputStream;//保存文件方式 默認:1-覆蓋;2-文件名稱后面+(遞增數據) private Integer saveFileType;//省略get,set方法,詳情可查詢github上的源碼

創建FTP上傳工具類 FtpUtil.java:

public class FtpUtil {public static boolean uploadFile(FtpBean ftpBean) {boolean result = false;FTPClient ftp = new FTPClient();try {int reply;ftp.connect(ftpBean.getAddress(), Integer.valueOf(ftpBean.getPort()));// 連接FTP服務器// 如果采用默認端口,可以使用ftp.connect(host)的方式直接連接FTP服務器ftp.login(ftpBean.getUsername(), ftpBean.getPassword());// 登錄reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return result;}String tempPath = ftpBean.getBasepath();String fileName = ftpBean.getFileName();if (!ftp.changeWorkingDirectory(ftpBean.getBasepath())) {//判斷目錄是否存在,如果目錄不存在創建目錄,目錄存在則跳轉到此目錄下String []tempPathList = tempPath.split("/");for (String dir : tempPathList) {if(dir != null && dir != ""){if (!ftp.changeWorkingDirectory(dir)) {if (!ftp.makeDirectory(dir)) {return result;} else {ftp.changeWorkingDirectory(dir);}}}}}//保存文件方式 默認:1-覆蓋;2-文件名稱后面+(遞增數據) if(ftpBean.getSaveFileType() == 2){FTPFile[]file = ftp.listFiles();Integer i = 1;//采用遞歸,文件名重復自動加(i)fileName = aaa(file, i, fileName, fileName);}//設置上傳文件的類型為二進制類型ftp.setFileType(FTP.BINARY_FILE_TYPE);//設置模式很重要ftp.enterLocalActiveMode();//上傳文件result = ftp.storeFile(fileName, ftpBean.getInputStream());if(!result){return result;}ftpBean.getInputStream().close();ftp.logout();result = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return result;}//遞歸重命名去重復public static String aaa(FTPFile[] file, int i, String fileName, String nameFlag){boolean isOk = true;for (FTPFile file2 : file) {String flag = file2.getName();if(nameFlag.equals(flag)){String []fileNames = fileName.split("\\.");if(fileNames.length > 0){nameFlag = "";}for (int j = 0; j < fileNames.length; j++) {if(j == fileNames.length-1){nameFlag = nameFlag+"("+i+")."+fileNames[j];}else if(j == fileNames.length-2){nameFlag = nameFlag + fileNames[j];}else{nameFlag = nameFlag + fileNames[j] + ".";}}i += 1;isOk = false;}else{isOk = true;}}if(isOk == false){nameFlag = aaa(file, i, fileName, nameFlag);}return nameFlag;} }

生成上傳路徑規則工具類 GenerateDirUtil.java:

public class GenerateDirUtil {public static enum Type{DEFAULT,FILETYPE}/*** <p>* type為DEFAULT或者type為null時:獲取原文件所在路徑,直接在FTP創建此路徑保存* type為FILETYPE時:則根據文件類型創建目錄* </p>* @method_Name : fileDirectory* @author : Maple* @creation : 2019年3月15日 下午1:59:31 * @param file* @return*/public static String fileDirectory(File file, Type type){if(Type.FILETYPE.equals(type)){String resDir = "/";resDir = new MimetypesFileTypeMap().getContentType(file);resDir.replace('\\', '/');return "/"+resDir;}else{String resDir = "/";resDir = file.getParent();return resDir;}} }

創建測試用例FtpDemo.java:

public class FtpDemo {public static void main(String[] args){//獲取本地需要上傳的文件,此處只用作測試File file = new File("D:\\test\\ftp.txt");if(file.isFile() && file.exists()){//設置FTP上傳的基本信息,可直接初始化數據FtpBean ftp = new FtpBean();//自動生成路徑,默認取源文件路徑,為FILETYPE時,取文件類型做路徑//如使用自己的路徑,直接ftp.setBasepath賦值即可String basepath = GenerateDirUtil.fileDirectory(file, GenerateDirUtil.Type.FILETYPE);ftp.setBasepath(basepath);/*** 文件名生成方式* 1、自己命名 ftp.setBasepath("aaaa.txt");* 2、取文件原名字 ftp.setBasepath(file.getName());* 3、根據時間戳自動生成 */SimpleDateFormat sdfms = new SimpleDateFormat("yyyyMMddHHmmssSSS");String date = sdfms.format(System.currentTimeMillis());//添加三位自動生成的數字,防止重復int i=(int)(Math.random()*900)+100; String fileName = date + i +".txt";ftp.setFileName(fileName);//測試命名重復遞增fileName = "aaa.txt";try{//將文件轉換成一個輸入流InputStream in = new FileInputStream(file);ftp.setInputStream(in);//傳入文件名稱,和文件輸入流,上傳至FTP服務器boolean isOk = FtpUtil.uploadFile(ftp);if(isOk){System.out.println("文件上傳成功");}else{System.out.println("文件上傳失敗");}in.close();}catch(Exception e){e.printStackTrace();}}else{System.out.println("文件不存在");}} }

待上傳的文件截圖:

上傳至FTP服務器后的截圖,分別用按時間戳命名和固定不重復命名兩種方法實現:

總結

以上是生活随笔為你收集整理的java上传文件到FTP服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。