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

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

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

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

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

  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插件、項(xiàng)目的基本結(jié)構(gòu)和文件、構(gòu)建和運(yùn)行項(xiàng)目的方法以及常見問題的解決,Maven通過簡化項(xiàng)目構(gòu)建和依賴管理,成為Java開發(fā)中不可或缺的工具
    2024-11-11
  • SpringBoot使用郵箱發(fā)送驗(yàn)證碼實(shí)現(xiàn)注冊功能

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

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用郵箱發(fā)送驗(yàn)證碼實(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

最新評論

来凤县| 常熟市| 乌恰县| 阿鲁科尔沁旗| 庆城县| 泸定县| 安泽县| 盐城市| 古蔺县| 怀柔区| 迁安市| 永靖县| 千阳县| 长子县| 广昌县| 团风县| 安宁市| 钟祥市| 玛纳斯县| 砀山县| 焦作市| 美姑县| 庐江县| 江孜县| 佛坪县| 芒康县| 增城市| 东辽县| 翁牛特旗| 昌黎县| 邓州市| 江都市| 老河口市| 山西省| 贡觉县| 九龙城区| 房产| 长宁县| 徐州市| 湾仔区| 屏边|