我想:
Java on Netbeans:
创建一个程序,列出ftp站点上所有文件的名称。然后定期检查是否有任何更新并生成新列表。
我的思维过程是:
通过ftp连接返回root中的文件和目录FTPClient()ftp.listFiles(dir)(名称和上次修改日期)
如果文件添加到fileArray
2.1如果fileArray比较日期中存在文件 2.2如果扫描的文件日期比fileArray中的旧文件更新 2.22否则将扫描日期更新为fileArray 2.11否则添加
如果目录添加到dirArray 3.11如果dirArray中存在扫描目录,则比较上次修改日期 3.21如果扫描的目录日期比dirArray中的旧目录日期更新,则替换为arraylist 3.22否则删除 3.12否则将目录添加到arraylist
循环通过dirArray抓取名称并将其输入到目录并向计数器添加+1
从文件arraylist中删除早于scanDate的所有文件 7.1通过fileArray循环 7.2将返回的文件日期与scanDate进行比较 7.21如果扫描日期!= scanDate删除文件。
列出fileArray中的文件
到目前为止,这是我的代码:
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?
答案 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);
}