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 總結下來如此使用: //創建對
使用java向FTP上傳或下載壓縮檔案時的問題
今天在使用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