Java將文件上傳到ftp服務(wù)器
本文實例為大家分享了Java將文件上傳到ftp服務(wù)器的具體代碼,供大家參考,具體內(nèi)容如下
首先簡單介紹一下什么是FTP,以及如何在自己的電腦上搭建一個ftp服務(wù)器;
—— FTP是文件傳輸協(xié)議(FTP)是一種客戶端/服務(wù)器協(xié)議,用于將文件傳輸?shù)街鳈C或與主機交換文件。它可以使用用戶名和密碼進行身份驗證。匿名 FTP 允許用戶從 Internet 訪問文件,程序和其他數(shù)據(jù),而無需用戶 ID 或密碼??傊褪欠奖阋粋€可以上傳下載文件的地方。
要實現(xiàn)上傳文件,首先要在本地創(chuàng)建一個ftp服務(wù)器(win10系統(tǒng));
一、本地創(chuàng)建一個其他用戶
二、創(chuàng)建FTP目錄
三、賬戶綁定FTP目錄,登錄驗證
四、FTP目錄創(chuàng)建好之后可以通過你選擇的ip 進行訪問 ftp://ip地址,賬號密碼就是你所設(shè)置的用戶的賬號密碼
下面寫javaFTP上傳工具類代碼,復(fù)制可用
maven依賴
<dependency> ?? ??? ?<groupId>commons-net</groupId> ?? ??? ?<artifactId>commons-net</artifactId> ?? ??? ?<version>3.1</version> </dependency>
public class FtpUtil { ? ? /** ? ? ?* Description: 向FTP服務(wù)器上傳文件 ? ? ?* @param host FTP服務(wù)器hostname ? ? ?* @param port FTP服務(wù)器端口 ? ? ?* @param username FTP登錄賬號 ? ? ?* @param password FTP登錄密碼 ? ? ?* @param basePath FTP服務(wù)器基礎(chǔ)目錄 ? ? ?* @param filePath FTP服務(wù)器文件存放路徑。文件的路徑為basePath+filePath ? ? ?* @param filename 上傳到FTP服務(wù)器上的文件名 ? ? ?* @param input 輸入流 ? ? ?* @return 成功返回true,否則返回false ? ? ?*/ ? ? public static boolean uploadFile(String host, int port, String username, String password, String basePath, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?String filePath, String filename, InputStream input) { ? ? ? ? boolean result = false; ? ? ? ? FTPClient ftp = new FTPClient(); ? ? ? ? try { ? ? ? ? ? ? int reply; ? ? ? ? ? ? ftp.connect(host, port);// 連接FTP服務(wù)器 ? ? ? ? ? ? // 如果采用默認端口,可以使用ftp.connect(host)的方式直接連接FTP服務(wù)器 ? ? ? ? ? ? ftp.login(username, password);// 登錄 ? ? ? ? ? ? reply = ftp.getReplyCode(); ? ? ? ? ? ? if (!FTPReply.isPositiveCompletion(reply)) { ? ? ? ? ? ? ? ? ftp.disconnect(); ? ? ? ? ? ? ? ? return result; ? ? ? ? ? ? } ? ? ? ? ? ? //切換到上傳目錄 ? ? ? ? ? ? if (!ftp.changeWorkingDirectory(basePath+filePath)) { ? ? ? ? ? ? ? ? //如果目錄不存在創(chuàng)建目錄 ? ? ? ? ? ? ? ? String[] dirs = filePath.split("/"); ? ? ? ? ? ? ? ? String tempPath = basePath; ? ? ? ? ? ? ? ? for (String dir : dirs) { ? ? ? ? ? ? ? ? ? ? if (null == dir || "".equals(dir)) continue; ? ? ? ? ? ? ? ? ? ? tempPath += "/" + dir; ? ? ? ? ? ? ? ? ? ? if (!ftp.changeWorkingDirectory(tempPath)) { ?//進不去目錄,說明該目錄不存在 ? ? ? ? ? ? ? ? ? ? ? ? if (!ftp.makeDirectory(tempPath)) { //創(chuàng)建目錄 ? ? ? ? ? ? ? ? ? ? ? ? ? ? //如果創(chuàng)建文件目錄失敗,則返回 ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("創(chuàng)建文件目錄"+tempPath+"失敗"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? return result; ? ? ? ? ? ? ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? ? ? ? ? ? ? //目錄存在,則直接進入該目錄 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ftp.changeWorkingDirectory(tempPath); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? //設(shè)置上傳文件的類型為二進制類型 ? ? ? ? ? ? ftp.setFileType(FTP.BINARY_FILE_TYPE); ? ? ? ? ? ? //上傳文件 ? ? ? ? ? ? if (!ftp.storeFile(filename, input)) { ? ? ? ? ? ? ? ? return result; ? ? ? ? ? ? } ? ? ? ? ? ? input.close(); ? ? ? ? ? ? ftp.logout(); ? ? ? ? ? ? result = true; ? ? ? ? } catch (IOException e) { ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? } finally { ? ? ? ? ? ? if (ftp.isConnected()) { ? ? ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? ? ? ftp.disconnect(); ? ? ? ? ? ? ? ? } catch (IOException ioe) { ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? return result; ? ? } ? ? /** ? ? ?* Description: 從FTP服務(wù)器下載文件 ? ? ?* @param host FTP服務(wù)器hostname ? ? ?* @param port FTP服務(wù)器端口 ? ? ?* @param username FTP登錄賬號 ? ? ?* @param password FTP登錄密碼 ? ? ?* @param remotePath FTP服務(wù)器上的相對路徑 ? ? ?* @param fileName 要下載的文件名 ? ? ?* @param localPath 下載后保存到本地的路徑 ? ? ?* @return ? ? ?*/ ? ? public static boolean downloadFile(String host, int port, String username, String password, String remotePath, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?String fileName, String localPath) { ? ? ? ? boolean result = false; ? ? ? ? FTPClient ftp = new FTPClient(); ? ? ? ? try { ? ? ? ? ? ? int reply; ? ? ? ? ? ? ftp.connect(host, port); ? ? ? ? ? ? // 如果采用默認端口,可以使用ftp.connect(host)的方式直接連接FTP服務(wù)器 ? ? ? ? ? ? ftp.login(username, password);// 登錄 ? ? ? ? ? ? reply = ftp.getReplyCode(); ? ? ? ? ? ? if (!FTPReply.isPositiveCompletion(reply)) { ? ? ? ? ? ? ? ? ftp.disconnect(); ? ? ? ? ? ? ? ? return result; ? ? ? ? ? ? } ? ? ? ? ? ? ftp.changeWorkingDirectory(remotePath);// 轉(zhuǎn)移到FTP服務(wù)器目錄 ? ? ? ? ? ? FTPFile[] fs = ftp.listFiles(); ? ? ? ? ? ? for (FTPFile ff : fs) { ? ? ? ? ? ? ? ? if (ff.getName().equals(fileName)) { ? ? ? ? ? ? ? ? ? ? File localFile = new File(localPath + "/" + ff.getName()); ? ? ? ? ? ? ? ? ? ? OutputStream is = new FileOutputStream(localFile); ? ? ? ? ? ? ? ? ? ? ftp.retrieveFile(ff.getName(), is); ? ? ? ? ? ? ? ? ? ? is.close(); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? ftp.logout(); ? ? ? ? ? ? result = true; ? ? ? ? } catch (IOException e) { ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? } finally { ? ? ? ? ? ? if (ftp.isConnected()) { ? ? ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? ? ? ftp.disconnect(); ? ? ? ? ? ? ? ? } catch (IOException ioe) { ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? return result; ? ? } ? ? //ftp上傳文件測試main函數(shù) ? ? public static void main(String[] args) { ? ? ? ? //上傳 ? ? ? ? try { ? ? ? ? ? ? FileInputStream in=new FileInputStream(new File("D:\\text.txt")); ? ? ? ? ? ? boolean flag = uploadFile("ip", 21, "username", "password", "/text","/wenjian", "hello.txt", in); ? ? ? ? ? ? System.out.println(flag); ? ? ? ? } catch (FileNotFoundException e) { ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? } ? ? ? ? //下載 ? ? ? ? boolean b = downloadFile("ip", 21, "username", "password", "/text/wenjian", "hello.txt", "D://"); ? ? ? ? System.out.println(b); ? ? }
java代碼中都有注釋,就不解釋了,下面有一個main 方法,可以直接進行測試。以上就是使用java向FTP文件上傳的全部內(nèi)容。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用Java實現(xiàn)和可被K整除的子數(shù)組完整實例
這篇文章主要給大家介紹了關(guān)于利用Java實現(xiàn)和可被K整除的子數(shù)組的相關(guān)資料,這道題來自力扣,通過學(xué)習(xí)這道題的解題思路以及代碼對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01java使用ffmpeg實現(xiàn)上傳視頻的轉(zhuǎn)碼提取視頻的截圖等功能(代碼操作)
這篇文章主要介紹了java使用ffmpeg實現(xiàn)上傳視頻的轉(zhuǎn)碼,提取視頻的截圖等功能,本文圖文并茂給大家介紹的非常詳細,對大家的工作或?qū)W習(xí)具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03不規(guī)范使用ThreadLocal導(dǎo)致bug分析解決
這篇文章主要為大家介紹了不規(guī)范使用ThreadLocal導(dǎo)致bug分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01