尝试创建一个简单的插件,只需连接到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;
}
Run Code Online (Sandbox Code Playgroud)
它获取文件列表,然后返回一个文件,它不是最新的文件.有没有其他方法可以使用FTPClient比较文件修改日期,或者任何人都可以指出我正在做错的方向.谢谢.
而不是你的"lastFileModified"方法,我会创建一个比较器.编写排序方法会更容易:
public class LastModifiedComparator implements Comparator<FTPFile> {
public int compare(FTPFile f1, FTPFile f2) {
return f1.getTimestamp().compareTo(f2.getTimeStamp());
}
}
Run Code Online (Sandbox Code Playgroud)
然后,获取"最后"FTPFile更容易:
public FTPFile getMaxLastModified(FTPFile[] ftpFiles) {
return Collections.max(Arrays.asList(ftpFiles), new LastModifiedComparator());
}
Run Code Online (Sandbox Code Playgroud)
要回到您的问题:"lastModified"时间戳未链接到FTP上载顺序.通过FTP协议上载文件时,可能会保留文件的原始时间戳.
因此,如果file1比file2旧,则即使file2在FTP服务器上的file1之前上载,您的方法也将始终返回file2.
我认为无法确定上次上传的文件.FTP协议不存储此信息.只有在重载FTP客户端的"put"方法时才能这样做:
public void put(File file) {
// upload code
FTPFile ftpFile = getJustUploadedFile(file);
ftpFile.setTimestamp(new Calendar()); // Now!
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13688 次 |
| 最近记录: |