从ftp获取最新文件

尝试创建一个简单的插件,该插件仅连接到ftp站点,查找最新文件,然后下载。但是,它没有获取最新文件。

我正在使用org.apache.commons.net.ftp.ftpclient进行所有操作。

这是我的代码

public static void main(String[] args)

{

FTPClient client = new FTPClient();

try

{

client.connect(host);

client.login(user, pwd);

FTPFile[] files = client.listFiles();

FTPFile lastFile = lastFileModified(files);

System.out.println(lastFile.getName());

client.disconnect();

}

catch(SocketException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

catch(IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static FTPFile lastFileModified(FTPFile[] files) {

Date lastMod = files[0].getTimestamp().getTime();

FTPFile choice = null;

for (FTPFile file : files) {

if (file.getTimestamp().getTime().after(lastMod)) {

choice = file;

lastMod = file.getTimestamp().getTime();

}

}

return choice;

}

它获取文件列表,然后返回文件,它不是最新文件。还有其他方法可以使用FTPClient比较文件修改日期,或者有人可以向我指出我做错了什么。谢谢。

爪哇

回答:

我将创建一个比较器,而不是您的“lastFileModified”方法。编写sort方法会更容易:

public class LastModifiedComparator implements Comparator<FTPFile> {

public int compare(FTPFile f1, FTPFile f2) {

return f1.getTimestamp().compareTo(f2.getTimeStamp());

}

}

然后,获取“最后一个” FTPFile要容易得多:

public FTPFile getMaxLastModified(FTPFile[] ftpFiles) {

return Collections.max(Arrays.asList(ftpFiles), new LastModifiedComparator());

}

回到您的问题:“ lastModified”时间戳未链接到FTP上传顺序。通过FTP协议上载文件时,文件的原始时间戳可能会保留。

因此,如果file1早于file2,即使在FTP服务器上file2在file1之前上传,您的方法也将始终返回file2。

我认为无法确定最后上传的文件。FTP协议不存储此信息。仅当您重载FTP客户端的“ put”方法时,您才能这样做:

public void put(File file) {

// upload code

FTPFile ftpFile = getJustUploadedFile(file);

ftpFile.setTimestamp(new Calendar()); // Now!

}

以上是 从ftp获取最新文件 的全部内容, 来源链接: utcz.com/qa/418358.html

回到顶部