最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用ftpClient下載ftp上所有文件解析

 更新時間:2017年04月24日 08:48:25   作者:帥氣的毛毛俠  
最近項目需要寫個小功能,需求就是實(shí)時下載ftp指定文件夾下的所有文件(包括子目錄)到本地文件夾中,保留文件到目錄路徑不變。今天小編給大家分享使用ftpClient下載ftp上所有文件的方法,需要的的朋友參考下吧

需求:最新項目需要,寫個小功能,需求就是實(shí)時下載ftp指定文件夾下的所有文件(包括子目錄)到本地文件夾中,保留文件到目錄路徑不變。

分析:關(guān)鍵在于實(shí)時和下載并保持原目錄。實(shí)時使用線程的定時調(diào)度完成,主要做后者,這顯然要使用遞歸,但是ftp上的文件是不能直接得到相對路徑的(恕我才疏學(xué)淺,并沒有在FTPClient類中找到類似getPath()的方法),因此路徑是要自己記錄。總體思路有以下:

  1、得到所有路徑以及子路徑:遞歸遍歷所有文件到路徑。參數(shù):ftp為FTPClient對象,path為當(dāng)前的路徑,pathArray保存當(dāng)前的路徑,并將此路徑集合帶到主函數(shù)中去   

getPath(ftp,path,pathArray);
 public static void getPath(FTPClient ftp,String path,ArrayList<String> pathArray) throws IOException{
    FTPFile[] files = ftp.listFiles();
    for (FTPFile ftpFile : files) {
      if(ftpFile.getName().equals(".")||ftpFile.getName().equals(".."))continue;
      if(ftpFile.isDirectory()){//如果是目錄,則遞歸調(diào)用,查找里面所有文件
        path+="/"+ftpFile.getName();
        pathArray.add(path);
        ftp.changeWorkingDirectory(path);//改變當(dāng)前路徑
        getPath(ftp,path,pathArray);//遞歸調(diào)用
        path=path.substring(0, path.lastIndexOf("/"));//避免對之后的同目錄下的路徑構(gòu)造作出干擾,
      }
    }
  }

  2、下載到指定的本地文件夾中,

    download(ftp, pathArray, "c:\\download");程序之前出了寫錯誤,為了排查,我把下載分成兩部分,第一部分先將所有目錄創(chuàng)建完成,在第二個for循環(huán)中進(jìn)行文件的下載。參數(shù):ftp為FTPClient,pathArray為1中帶出的路徑集合,后面一個String為本地路徑  

 public static void download(FTPClient ftp,ArrayList<String> pathArray,String localRootPath) throws IOException{
    for (String string : pathArray) {
      String localPath=localRootPath+string;
      File localFile = new File(localPath);
      if (!localFile.exists()) { 
        localFile.mkdirs(); 
      }
    }
    for (String string : pathArray) {
      String localPath=localRootPath+string;//構(gòu)造本地路徑
      ftp.changeWorkingDirectory(string);
      FTPFile[] file=ftp.listFiles();
      for (FTPFile ftpFile : file) {
        if(ftpFile.getName().equals(".")||ftpFile.getName().equals(".."))continue;
        File localFile = new File(localPath);
        if(!ftpFile.isDirectory()){
          OutputStream is = new FileOutputStream(localFile+"/"+ftpFile.getName());
          ftp.retrieveFile(ftpFile.getName(), is);
          is.close();
        }
      }
    }
  }

測試的主函數(shù),使用的ftpClient為org.apache.commons.net.ftp.FTPClient:

 public static void main(String[] args) throws SocketException, IOException {
    FTPClient ftp = new FTPClient();
    ftp.connect("127.0.0.1");
    ftp.login("test","test");
    int reply;
    reply = ftp.getReplyCode();
    if(!FTPReply.isPositiveCompletion(reply)) {
      ftp.disconnect();
      System.err.println("FTP server refused connection.");
      System.exit(1);
    }
    ftp.setBufferSize(1024);
    ftp.setFileType(FTP.BINARY_FILE_TYPE); 
    ftp.enterLocalPassiveMode();
    String path="";
    ArrayList<String> pathArray=new ArrayList<String>();
    getPath(ftp,path,pathArray);
    System.out.println(pathArray);
    download(ftp, pathArray, "c:\\download");
    ftp.logout();
    ftp.disconnect();
  }

以上所述是小編給大家介紹的使用ftpClient下載ftp上所有文件,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Mybatis映射文件之常用標(biāo)簽及特殊字符的處理方法

    Mybatis映射文件之常用標(biāo)簽及特殊字符的處理方法

    這篇文章主要介紹了Mybatis映射文件常用標(biāo)簽及特殊字符的處理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Java使用貪心算法解決電臺覆蓋問題(示例詳解)

    Java使用貪心算法解決電臺覆蓋問題(示例詳解)

    貪心算法是指在對問題進(jìn)行求解時,在每一步選擇中都采取最好或最優(yōu)的選擇,從而導(dǎo)致結(jié)果理想化,下面通過本文介紹下Java使用貪心算法解決電臺覆蓋問題,需要的朋友可以參考下
    2022-04-04
  • Apache Maven創(chuàng)建工程的實(shí)現(xiàn)示例

    Apache Maven創(chuàng)建工程的實(shí)現(xiàn)示例

    本文詳細(xì)介紹了如何使用Maven創(chuàng)建一個新的Java工程,包括使用maven-archetype-plugin插件、項目的基本結(jié)構(gòu)和文件、構(gòu)建和運(yùn)行項目的方法以及常見問題的解決,Maven通過簡化項目構(gòu)建和依賴管理,成為Java開發(fā)中不可或缺的工具
    2024-11-11
  • SpringBoot使用郵箱發(fā)送驗證碼實(shí)現(xiàn)注冊功能

    SpringBoot使用郵箱發(fā)送驗證碼實(shí)現(xiàn)注冊功能

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用郵箱發(fā)送驗證碼實(shí)現(xiàn)注冊功能實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java Base64解碼錯誤及解決方法

    Java Base64解碼錯誤及解決方法

    本篇文章給大家從一個Java Base64解碼錯誤著手給大家分析了錯誤的原因以及解決辦法,有興趣的可以參考學(xué)習(xí)下。
    2018-02-02
  • JAVA中對List進(jìn)行查詢

    JAVA中對List進(jìn)行查詢

    下面小編就為大家?guī)硪黄趈ava List中進(jìn)行模糊查詢的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-08-08
  • ASM源碼學(xué)習(xí)之ClassReader、ClassVisitor與ClassWriter詳解

    ASM源碼學(xué)習(xí)之ClassReader、ClassVisitor與ClassWriter詳解

    這篇文章主要給大家介紹了ASM源碼之ClassReader、ClassVisitor與ClassWriter的相關(guān)資料,文中介紹的非常相信,相信對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • Value注解支持對象類型ConfigurationProperties功能

    Value注解支持對象類型ConfigurationProperties功能

    這篇文章主要為大家介紹了Value注解支持對象類型ConfigurationProperties功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • BigDecimal divide除法除不盡報錯的問題及解決

    BigDecimal divide除法除不盡報錯的問題及解決

    這篇文章主要介紹了BigDecimal divide除法除不盡報錯的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 詳解如何解決SSM框架前臺傳參數(shù)到后臺亂碼的問題

    詳解如何解決SSM框架前臺傳參數(shù)到后臺亂碼的問題

    這篇文章主要介紹了詳解如何解決SSM框架前臺傳參數(shù)到后臺亂碼的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論

洪雅县| 图木舒克市| 电白县| 定日县| 阳西县| 布尔津县| 大厂| 登封市| 呼图壁县| 景德镇市| 阿克陶县| 孙吴县| 成都市| 开化县| 泊头市| 交城县| 漳州市| 海南省| 青神县| 岐山县| 新晃| 大埔区| 甘谷县| 普洱| 方山县| 木兰县| 溧水县| 顺昌县| 遂平县| 马鞍山市| 中方县| 博爱县| 泗阳县| 铜陵市| 黄骅市| 泸西县| 皮山县| 诸暨市| 松江区| 新巴尔虎右旗| 溧水县|