使用FTPClient如何将目录名称添加到ArrayList <string>()?

时间:2017-08-09 09:53:20

标签: ftp-client

我想:

Java on Netbeans:

创建一个程序,列出ftp站点上所有文件的名称。然后定期检查是否有任何更新并生成新列表。

我的思维过程是:

  1. 通过ftp连接返回root中的文件和目录FTPClient()ftp.listFiles(dir)(名称和上次修改日期)

  2. 如果文件添加到fileArray

    2.1如果fileArray比较日期中存在文件     2.2如果扫描的文件日期比fileArray中的旧文件更新     2.22否则将扫描日期更新为fileArray 2.11否则添加

  3. 如果目录添加到dirArray 3.11如果dirArray中存在扫描目录,则比较上次修改日期     3.21如果扫描的目录日期比dirArray中的旧目录日期更新,则替换为arraylist     3.22否则删除 3.12否则将目录添加到arraylist

  4. 循环通过dirArray抓取名称并将其输入到目录并向计数器添加+1

  5. 再次从步骤1开始直到计数器>目录arraylist长度;
  6. 从文件arraylist中删除早于scanDate的所有文件 7.1通过fileArray循环 7.2将返回的文件日期与scanDate进行比较 7.21如果扫描日期!= scanDate删除文件。

  7. 列出fileArray中的文件

  8. 到目前为止,这是我的代码:

    public class DanLister {
    
    private Date scannedDate;
    private String dir;
    private ArrayList<String>  dirArray = new ArrayList<String>();
    private ArrayList<String>  fileArray = new ArrayList<String>();
    
    
    
     public void listFTP(String FTPdirectoryName,String server, String un, String pw, String dir, Calendar start, Calendar end){
    
     try {
      /// Instantiate new FTP Client 
      FTPClient ftp = new FTPClient();
    
      /// Connect to FTP
      ftp.connect(server);
      ftp.login(un, pw);
      System.out.println("Connected to " + server + "!");
      System.out.println(ftp.getReplyString());
    
    
    
    
     FTPFile[] filelist = ftp.listFiles(dir);
    System.out.println(Arrays.toString(filelist));
    
    
     ftp.logout();
      ftp.disconnect();
    } catch (IOException ex) {
      Logger.getLogger(FTPListFiles.class.getName()).log(Level.SEVERE, 
    null, ex);
     }
    
    
    }
    
    }
    

    我的问题是这返回FTPFile [],它不会进入我的dirArray我不确定如何继续这部分?我不知道如何转换FTPFile []或只是获取名称和日期并将其放入dirArray?

1 个答案:

答案 0 :(得分:0)

使用FTPListParseEngine解决

我创建了这个课程:

package com.tableview.ftpmonitor;

import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPFileEntryParser;
import org.apache.commons.net.ftp.FTPListParseEngine;

public class parseFileList {

private String encoding;


public FTPFile[] parseFileList(InputStream listStream) throws 
IOException {
FTPListParseEngine engine = new 
FTPListParseEngine((FTPFileEntryParser) this);
engine.readServerList(listStream, encoding);
return engine.getFiles();


 }
}

并使用此代码将文件详细信息放入ArrayList:

public void listFTP(String FTPdirectoryName,String server, String un, String pw, String dir, Calendar start, Calendar end){

 try {
  /// Instantiate new FTP Client 
  FTPClient ftp = new FTPClient();
  FTPFile ftpFile = new FTPFile();
  parseFileList pfl = new parseFileList();
  /// Connect to FTP
  ftp.connect(server);
  ftp.login(un, pw);
  System.out.println("Connected to " + server + "!");
  System.out.println(ftp.getReplyString());




 FTPListParseEngine engine = ftp.initiateListParsing(dir);
 int files = engine.getFiles().length;
 System.out.println("This is number of files:" + files);

 if(engine.hasNext()){

    String ln = Arrays.toString(engine.getFiles());
    dirArray.add(ln);
    System.out.println(dirArray);


}