1. 程式人生 > >Java 實現Ftp上傳下載檔案

Java 實現Ftp上傳下載檔案

最近專案中需要實現將檔案先存放到ftp上,需要的時候再從ftp上下載,做的過程中碰到了問題,發現中文檔名的無法上傳到ftp上,ftp上的中文檔名的檔案下載不下來,幾番折騰,終於搞定了,記錄一下備忘。

首先給工程新增maven依賴,pom.xml檔案中新增:

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>1.4.1</version>
</dependency>

以下是Ftp工具類:

package com.test.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class FtpUtil {
    private final static Log logger = LogFactory.getLog(FtpUtil.class);  
	  
    /** 
     * 獲取FTPClient物件 
     * @param ftpHost       FTP主機伺服器 
     * @param ftpPassword   FTP 登入密碼 
     * @param ftpUserName   FTP登入使用者名稱 
     * @param ftpPort       FTP埠 預設為21 
     * @return 
     */  
    public static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort) {  
        FTPClient ftpClient = new FTPClient();  
        try {  
            ftpClient = new FTPClient();  
            ftpClient.connect(ftpHost, ftpPort);              // 連線FTP伺服器  
            ftpClient.login(ftpUserName, ftpPassword);        // 登陸FTP伺服器 
            ftpClient.setControlEncoding("UTF-8"); 
            // 中文支援 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { logger.info("未連線到FTP,使用者名稱或密碼錯誤。"); ftpClient.disconnect(); } else { logger.info("FTP連線成功。"); } } catch (SocketException e) { e.printStackTrace(); logger.info("FTP的IP地址可能錯誤,請正確配置。"); } catch (IOException e) { e.printStackTrace(); logger.info("FTP的埠錯誤,請正確配置。"); } return ftpClient; } /* * 從FTP伺服器下載檔案 * @param ftpHost             FTP IP地址 * @param ftpUserName         FTP 使用者名稱 * @param ftpPassword         FTP使用者名稱密碼 * @param ftpPort             FTP埠 * @param ftpPath             FTP伺服器中檔案所在路徑 格式: ftptest/aa * @param localPath           下載到本地的位置 格式:H:/download * @param fileName            FTP伺服器上要下載的檔名稱 * @param targetFileName      FTP伺服器上要下載的檔名稱 */ public static void downloadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String localPath, String fileName, String targetFileName) { FTPClient ftpClient = null; try { ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort); ftpClient.changeWorkingDirectory(ftpPath); String f_ame = new String(fileName.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING); //編碼檔案格式,解決中文檔名
File localFile = new File(localPath + File.separatorChar + targetFileName); OutputStream os = new FileOutputStream(localFile); ftpClient.retrieveFile(f_ame, os); os.close(); ftpClient.logout(); } catch (FileNotFoundException e) { logger.error("沒有找到" + ftpPath + "檔案"); e.printStackTrace(); } catch (SocketException e) { logger.error("連線FTP失敗."); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); logger.error("檔案讀取錯誤。"); e.printStackTrace(); } } /** * Description:             向FTP伺服器上傳檔案 * @param host              FTP伺服器hostname * @param port              FTP伺服器埠 * @param username          FTP登入賬號 * @param password          FTP登入密碼 * @param basePath          FTP伺服器基礎目錄 * @param filePath          FTP伺服器檔案存放路徑。例如分日期存放:/2015/01/01。檔案的路徑為basePath+filePath * @param filename          上傳到FTP伺服器上的檔名 * @param input             輸入流 * @return                  成功返回true,否則返回false */ public static boolean uploadFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort, String ftpPath, String filename, InputStream input) { boolean result = false; FTPClient ftpClient = new FTPClient(); try { int reply; ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort); ftpClient.changeWorkingDirectory(ftpPath); reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); return result; } filename = new String(filename.getBytes("GBK"), FTP.DEFAULT_CONTROL_ENCODING);    //編碼檔名,支援中文檔名 //上傳檔案 if (!ftpClient.storeFile(filename, input)) { return result; } input.close(); ftpClient.logout(); result = true; } catch (IOException e) { e.printStackTrace(); } finally { if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException ioe) { } } } return result; } public static void main(String[] args) { String ftpHost = "192.168.20.40"; String ftpUserName = "test"; String ftpPassword = "12345"; int ftpPort = 21; String ftpPath = "test/"; String fileName = "test_通知_4724.docx"; //上傳一個檔案 try{             String tmpPath = System.getProperty("java.io.tmpdir"); FileInputStream in=new FileInputStream(new File("D:\\" + fileName)); FtpUtil.uploadFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, fileName, in); System.out.println(tmpPath); FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, "E:\\", "test_通知_4724.docx", "測試下載檔案.docx"); } catch (Exception e){ e.printStackTrace(); System.out.println(e); } } }

相關推薦

Java 實現Ftp下載檔案

最近專案中需要實現將檔案先存放到ftp上,需要的時候再從ftp上下載,做的過程中碰到了問題,發現中文檔名的無法上傳到ftp上,ftp上的中文檔名的檔案下載不下來,幾番折騰,終於搞定了,記錄一下備忘。首先給工程新增maven依賴,pom.xml檔案中新增:<depende

java實現FTP下載:FTPClient類進行FTP下載檔案(包含導致假死現象)

介紹:  FTPClient是一個強大的FTP上傳下載工具,可以實現各種方式的ftp檔案傳輸,可以支援上傳下載各種大檔案(已在實踐中使用),而且存在官網使使用者方便的使用這個工具等等。 1.首先,程式中設定ftp請求方式為被動模式,即程式去請求ftp伺服器,要求伺服器來

Shell指令碼實現FTP下載檔案

Linux下使用Shell指令碼實現FTP自動上傳和下載檔案 登入FTP實現下載檔案功能 FTP伺服器:10.11.10.11 FTP路徑:Down 本地路徑: ./ 將檔案從FTP下載到本地的指令碼如下: 批量下載指令碼程式碼 #從

JAVA 實現FTP下載(sun.net.ftp.FtpClient)

package com.why.ftp;      import java.io.DataInputStream;      import java.io.File;      import java.io.FileInputStream;      import java

java實現FTP(檔案)、下載(檔案、資料夾、資料夾遞迴)、刪除(檔案、資料夾遞迴)

提示:必須先保證有在FTP上上傳、下載、刪除的許可權! 本文結構 ---- 先給出測試樣例(圖片版),再給出工具類程式碼(文字版)! 上傳測試 注意:.uploadFile(String remoteDir, String remoteFileName, F

java實現ftp檔案

實際專案需求:從資料庫查詢資訊,在本地生成檔案,再上傳到ftp 所用Jar包:NetComponents.jar 核心程式碼: import java.io.File; import java.io.FileInputStream; import java.io.IOExcepti

Java實現FTP檔案到Linux伺服器的那些坑

一、Linux安裝FTP服務         首先Linux伺服器需要安裝FTP服務,步驟如下: 1、執行如下ftp服務安裝命令: yum install vsftpd 可能會出現如下錯誤: "Couldn't open file /m

java實現ftp、修改、刪除檔案

public class FtpUtil { private static Logger logger = Logger.getLogger(FtpUtil.class); private static FTPClient CLIENT = null; privat

Linux系統中使用lftp命令實現FTP下載

lcd 工作 亂碼問題 pwd -- cd 命令 史記 size ls 命令 Linux 下常用的操作命令有 ftp、 lftp 和 sftp,圖形化界面非常好用的有 FileZilla。不過在服務器命令界面中,lftp使用比較方便,功能也比ftp更加強大。lftp的界面

Windows環境在cmd中使用ftp下載檔案 檢視端口占用情況

cmd使用 端口占用 ftp上傳下載檔案 上傳 下載 端口占用 有時候在執行一些開發工具的時候經常會碰到埠被佔用的情況,比如adb執行埠被其它流氓軟體佔用,解決方法如下 開啟執行 彈窗,輸入cm

CentOS 安裝rz和sz命令,實現ftp下載功能

lrzsz在linux裡可代替ftp上傳和下載。 windows 需要向centos伺服器上傳檔案,可直接在centos上執行命令yum -y install lrzsz 程式會自動安裝好,然後如你要下載者sz [找到你要下載的檔案] 如果你要上傳,者rz 瀏覽找到你

Ftp下載檔案,並能自定義進度條展示(FtpClient)

前一段時間,自己寫了一個java專案釋出在一個免費的java平臺上但是該平臺給專案的是虛擬路徑並不能上傳檔案。後來想到應用ftp作為上傳檔案的儲存器。 ftp上傳的工具類有sun(sun.net.*)和apache(org.apache.commons.net.ftp.* 

使用Apache Commons Net API實現FTP下載過程中的坑點

       最近專案需要實現FTP上傳、下載功能,採用了Apache Commons Net API。程式碼很快就完成了,但由於對相關API使用場景不是很熟悉,走了一些彎路,抽一點時間做一下總結。         A)主動被動模式選擇:FTP主動模式和被動模式的詳細介紹可

C#實現FTP下載功能

//ftp的上傳功能     private void Upload(string filename)     {         FileInfo fileInf = new FileInfo(filename);         string uri = "ftp://

java 實現ftp如何建立資料夾

package com.sinosoft.util; import java.io.IOException; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net

java+jsp程式碼實現FTP伺服器下載檔案

首先宣告一下。jsp從ftp伺服器上面下載檔案,有兩種方法1.直接給出檔案的地址 2.將檔案作為位元組流返回給瀏覽器 一 、先說第一種吧(這種發放很簡單)。 1.直接使用一個超連結:<a href='ftp://FTP使用者名稱:密碼@IP地址:埠號+ 後面是路徑 (

Java FTP下載實現

.net 一個 bin 上傳文件 pre 上傳下載 ole 切換 apach 昨天修改了一個接口,看到它涉及FTP的上傳與下載,用的是:org.apache.commons.net.ftp.FTPClient,它只支持FTP,不支持SFTP 總結下來如此使用: //創建對

使用javaFTP下載壓縮檔案時的問題

今天在使用java向FTP伺服器傳輸檔案時遇到了問題,這個檔案是好多圖片的壓縮檔案,直接使用 ftpClient.storeFile(f.getName(), instream); 會將壓縮檔案傳入FTP伺服器,但是在FTP伺服器解壓時發現,壓縮包裡面的圖片解壓不出來,檔案大小是一樣的,但

java 通過FTP下載檔案

Web開發時常會遇到需要使用者上傳檔案,並且把檔案儲存下來。 通常來說我們不會把檔案存放在與Tomcat同一個伺服器中,而是有一個專門的檔案伺服器存放檔案。 如何將檔案儲存到檔案伺服器中,這時候可以選擇使用FTP將檔案傳輸到專門的伺服器。 使用FTP傳輸檔案,我們所需要

java利用jcraft實現和遠端伺服器互動,實現下載檔案

git地址:https://github.com/fusugongzi/upLoadAndDownloadFile 第一步:引入maven支援,新增maven依賴 <!-- https://mvnrepository.com/artifact/com.jcraft