Java實(shí)現(xiàn)ftp文件上傳下載解決慢中文亂碼多個(gè)文件下載等問題
廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:
//文件上傳
public static boolean uploadToFTP(String url,int port,String username,String password,String path,String filename,InputStream input)
{
boolean success=false;
FTPClient ftp=new FTPClient();//org.apache.commons.net.ftp
try{
if(port>-1)
{
ftp.connect(url,port);
}else{
ftp.connect(url);//ftp默認(rèn)的端口是21
}
//很多人寫的是用ftp.getReplyCode()給獲取連接的返回值,但是這樣會導(dǎo)致storeFileStream返回null
if(ftp.login(username,password))
{
ftp.enterLocalActiveMode();
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
//創(chuàng)建目錄,如果存在會返回失敗
ftp.makeDirectory(path);
//切換目錄
ftp.changeWorkingDirectory(path);
//上傳文件
//FTP協(xié)議規(guī)定文件編碼格式為ISO-8859-1
filename=new String(filename.getBytes("GBK"),"ISO-8859-1");
OutputStream out=ftp.storeFileStream(filename);
byte[]byteArray=new byte[4096];
int read=0;
while((read=input.read(byteArray))!=-1)
{
out.write(byteArray,0,read);
}
out.close();
ftp.logout();
sucess=true;
}
}
catch(Exception e)
{
}
finally{
if(ftp.isConnected())
{
ftp.disConnecct();
}
}
}
//文件下載
public static boolean downloadFromFTP(String url,int port,String username,String password,String path,String localpath)
{
boolean success=false;
FTPClient ftp=new FTPClient();//org.apache.commons.net.ftp
try{
int reply;
if(port>-1)
{
ftp.connect(url,port);
}else{
ftp.connect(url);//ftp默認(rèn)的端口是21
}
//很多人寫的是用ftp.getReplyCode()給獲取連接的返回值,但是這樣會導(dǎo)致storeFileStream返回null
ftp.login(username,password)
ftp.enterLocalActiveMode();
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
reply=ftp.getReplyCode();
if(!FTPReply.isPositionCompletion(reply))
{
ftp.disconnect();
return success;s
}
//切換目錄 此處可以判斷,切換失敗就說明ftp上面沒有這個(gè)路徑
ftp.changeWorkingDirectory(path);
//上傳文件
FTPFile[]fs=ftp.listFiles();
OutputStream out=null;
InputStream in=null;
for(int i=0;i<fs.length;i++)
{
FTPFile ff=fs[i];
String outFileName=ff.getName();
//創(chuàng)建本地的文件時(shí)候要把編碼格式轉(zhuǎn)回來
String localFileName=new String(ff.getName().getBytes("ISO-8859-"),"GBK");
File localFile=new File(localpath+lcoalFileName);
out=new FileOutputStream(localFile);
in=ftp.retrieveFileStream(outFileName);
byte[]byteArray=new byte[4096];
int read=0;
while((read=in.read(byteArray))!=-1)
{
out.write(byteArray,0,read);
}
//這句很重要 要多次操作這個(gè)ftp的流的通道,要等他的每次命令完成
ftp.completePendingCommand();
out.flush();
out.close();
ftp.logout();
sucess=true;
}
catch(Exception e)
{
}
finally{
if(ftp.isConnected())
{
ftp.disConnecct();
}
}
}
以上所述是小編給大家介紹的Java實(shí)現(xiàn)ftp文件上傳下載解決慢中文亂碼多個(gè)文件下載等問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Java?8?的異步編程利器?CompletableFuture的實(shí)例詳解
這篇文章主要介紹了Java?8?的異步編程利器?CompletableFuture?詳解,本文通過一個(gè)例子給大家介紹下Java?8??CompletableFuture異步編程的相關(guān)知識,需要的朋友可以參考下2022-03-03
集成Spring Redis緩存的實(shí)現(xiàn)
今天小編就為大家分享一篇關(guān)于集成Spring Redis緩存的實(shí)現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Jax-rs規(guī)范REST接口文件上傳代碼實(shí)例
這篇文章主要介紹了Jax-rs規(guī)范REST接口文件上傳代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot將Spring fox更換為Springdoc的方法詳解
由于項(xiàng)目中使用Spring fox已經(jīng)不維護(hù)更新了,代碼掃描,掃出問題,需要將Spring fox更換為Spring Doc,所以本文給大家介紹了SpringBoot將Spring fox更換為Springdoc的方法,文中有相關(guān)的代碼供大家參考,需要的朋友可以參考下2024-01-01
Java設(shè)計(jì)模式模板方法(Template)原理解析
這篇文章主要介紹了Java設(shè)計(jì)模式模板方法(Template)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
El表達(dá)式使用問題javax.el.ELException:Failed to parse the expression
今天小編就為大家分享一篇關(guān)于Jsp El表達(dá)式使用問題javax.el.ELException:Failed to parse the expression的解決方式,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Java虛擬機(jī)裝載和初始化一個(gè)class類代碼解析
這篇文章的主要內(nèi)容是Java虛擬機(jī)裝載和初始化一個(gè)class類的代碼解析,包括介紹了裝載和初始化的時(shí)機(jī)與方式,需要的朋友可以參考下。2017-09-09

