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)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12Jax-rs規(guī)范REST接口文件上傳代碼實(shí)例
這篇文章主要介紹了Jax-rs規(guī)范REST接口文件上傳代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09SpringBoot將Spring fox更換為Springdoc的方法詳解
由于項(xiàng)目中使用Spring fox已經(jīng)不維護(hù)更新了,代碼掃描,掃出問題,需要將Spring fox更換為Spring Doc,所以本文給大家介紹了SpringBoot將Spring fox更換為Springdoc的方法,文中有相關(guān)的代碼供大家參考,需要的朋友可以參考下2024-01-01Java設(shè)計(jì)模式模板方法(Template)原理解析
這篇文章主要介紹了Java設(shè)計(jì)模式模板方法(Template)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11El表達(dá)式使用問題javax.el.ELException:Failed to parse the expression
今天小編就為大家分享一篇關(guān)于Jsp El表達(dá)式使用問題javax.el.ELException:Failed to parse the expression的解決方式,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12Java虛擬機(jī)裝載和初始化一個(gè)class類代碼解析
這篇文章的主要內(nèi)容是Java虛擬機(jī)裝載和初始化一個(gè)class類的代碼解析,包括介紹了裝載和初始化的時(shí)機(jī)與方式,需要的朋友可以參考下。2017-09-09