java如何使用ftp下載遠程服務(wù)器文件
更新時間:2024年11月06日 16:04:58 作者:Dubbo-羅
Java通過FTP下載文件主要有兩種方式:第一種是直接在連接中包含賬號和密碼進行遠程下載;第二種是登錄后使用賬號和密碼進行下載,這些方法適用于需要從遠程服務(wù)器獲取文件的場景
java使用ftp下載遠程服務(wù)器文件
第一種方法
連接中帶有賬號密碼直接遠程下載:
public Result<?> download(){
//進行下載文件---------------------------------開始
//遠程服務(wù)器下載地址
String fileurl = "ftp://superAdmin:superAdmin123@192.168.1.8:8888/usr/mp4pt/rec/CHN0/10110120011100/00001.mp4";
//文件物理路徑
String realfilepath = "F:/rhsftdemo/00001.mp4";
//本地中新建文件夾目錄
File file = new File("F:/rhsftdemo/");
if (!file.exists()) {
file.mkdirs();
}
log.info("存儲路徑realfilepath:" + realfilepath + "下載路徑:" + fileurl);
download(fileurl,realfilepath);
return Result.ok();
}
private static final int BUFFER_SIZE = 4096;
public void download(String ftpUrl,String savePath){
long startTime = System.currentTimeMillis();
// String ftpUrl = "ftp://ftp.f-secure.com/misc/unixutil/skeysrcs.zip";
String file = "";
// name of the file which has to be download
String host = ""; // ftp server
String user = ""; // user name of the ftp server
String pass = ""; // password of the ftp server
// String savePath = "F:\\skeysrcs.zip";
ftpUrl = String.format(ftpUrl, user, pass, host);
System.out.println("Connecting to FTP server");
try {
URL url = new URL(ftpUrl);
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();
long filesize = conn.getContentLength();
System.out.println("Size of the file to download in kb is:-" + filesize / 1024);
FileOutputStream outputStream = new FileOutputStream(savePath);
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
long endTime = System.currentTimeMillis();
System.out.println("File downloaded");
System.out.println("Download time in sec. is:-" + (endTime - startTime) / 1000);
outputStream.close();
inputStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
第二種方法
通過賬號密碼登錄后進行下載:
public Result<?> download(){
//進行下載文件---------------------------------開始
//遠程服務(wù)器下載地址
String fileurl = "ftp://192.168.1.8:8888/usr/mp4pt/rec/CHN0/20220420095100/00001.mp4";
//本地文件物理路徑
String realfilepath = "F:/rhsftdemo/00001.mp4";
//本地中新建文件夾目錄
File file = new File("F:/rhsftdemo/");
if (!file.exists()) {
file.mkdirs();
}
log.info("存儲路徑realfilepath:" + realfilepath + "下載路徑:" + fileurl);
boolean bb = retepasvfile(realfilepath,fileurl,"00001.mp4");
return Result.ok();
}
/**
* 本地保存
*
* @param localurl 本地文件物理路徑
* @param hosturl 遠程服務(wù)器下載地址
* @param filename 文件名稱
*
* @return
*/
public synchronized boolean retepasvfile(String localurl, String hosturl, String filename) {
FTPClient ftp = new FTPClient();
boolean re = false;
try {
log.info("本地存儲路徑==:" + localurl);
File file = FileUtil.getFile(localurl);
ftp.setConnectTimeout(10000);
ftp.setDataTimeout(10000);
ftp.connect("192.168.1.8", 21);
if (!org.springframework.util.StringUtils.isEmpty("admin") && !org.springframework.util.StringUtils.isEmpty("superAdmin123") && "superAdmin" != "null" && "superAdmin123" != "null") {
//這里輸入賬號密碼
ftp.login("superAdmin", "superAdmin123");
} else {
log.info("開始鏈接ftp:");
ftp.login("anonymous", "anonymous");
}
//ftp.bin();
// String str=ftp.pwd();
ftp.enterLocalPassiveMode(); //被動模式
ftp.setControlKeepAliveTimeout(60);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
boolean b = ftp.changeWorkingDirectory(hosturl.substring(0, hosturl.lastIndexOf("/")));
log.info("pwd:" + b + "---切換目錄:" + hosturl.substring(0, hosturl.lastIndexOf("/")));
long locationsize = file.length();//服務(wù)器上文件的大小
if (b) {
boolean res = false;
res = ftp.retrieveFile(filename, new FileOutputStream(file));
if (res) {
//ftp.disconnect();
log.info("文件下載完成");
re = true;
} else {
log.info("文件下載失敗");
//ftp.disconnect();
}
}
} catch (Exception e) {
e.getStackTrace();
log.error("retepasvfileSamba:e=3" + e);
} finally {
try {
ftp.disconnect();
} catch (Exception e) {
}
}
return re;
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 根據(jù)url下載網(wǎng)絡(luò)資源
這篇文章主要介紹了Java 根據(jù)url下載網(wǎng)絡(luò)資源的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-11-11
SpringCloud?Function?SpEL注入漏洞分析及環(huán)境搭建
SpringCloud 是一套分布式系統(tǒng)的解決方案,常見的還有阿里巴巴的Dubbo,F(xiàn)ass的底層實現(xiàn)就是函數(shù)式編程,SpringCloud Function 就是Spring提供的分布式函數(shù)式編程組件,下面給大家介紹下SpringCloud?Function?SpEL注入漏洞分析,感興趣的朋友一起看看吧2022-04-04
Spring和Websocket相結(jié)合實現(xiàn)消息的推送
這篇文章主要介紹了Spring和Websocket相結(jié)合實現(xiàn)消息的推送的相關(guān)資料,本文介紹的非常詳細具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧2016-02-02
Java?使用geotools讀取tiff數(shù)據(jù)的示例代碼
這篇文章主要介紹了Java?通過geotools讀取tiff,一般對于tiff數(shù)據(jù)的讀取,都會借助于gdal,本文結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下2022-04-04
淺談Spring Cloud下微服務(wù)權(quán)限方案
這篇文章主要介紹了淺談Spring Cloud下微服務(wù)權(quán)限方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
Java 處理超大數(shù)類型之BigInteger案例詳解
這篇文章主要介紹了Java 處理超大數(shù)類型之BigInteger案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-09-09

