java實現ftp下載,java實現ftp上傳下載文件

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

iis7服務器管理工具(曾用名:IIS7遠程桌面)當前可批量管理的為:win系列的操作系統(含VPS、VM)、linux操作系統:CentOS、Ubuntu、Debian等,支持命令及可視化SFTP管理、linux的vnc、win的vnc、FTP,webshell

IIS7服務器管理工具可以批量管理、定時上傳下載、同步操作、數據備份、到期提醒、自動更新。IIS7服務器管理工具適用於Windows操作系統和liunx操作系統;支持Ftp客戶端批量操作。

下載地址
:http://fwqglgj.iis7.net/cp/ftp/?hcfd-zc

java實現ftp下載,java實現ftp上傳下載文件

首先給工程添加maven依賴,pom.xml文件中添加:

<code>

<

dependency

>

    

<

groupId

>

commons-net

groupId

>

    

<

artifactId

>

commons-net

artifactId

>

    

<

version

>

1.4.1

version

>

dependency

>

/<code>

以下是Ftp工具類:

<code>

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); } }}/<code>


分享到:


相關文章: