問題描述
嘗試創建一個簡單的插件,它可以簡單地連接到一個 ftp 站點,查找最新的文件然后下載它.但是,它沒有獲取最新的文件.
Trying to create a simple plugin that simply connects to an ftp site, looks up the latest file and then downloads it. However, it isn't getting the latest file.
我正在使用 org.apache.commons.net.ftp.ftpclient 處理一切.
I'm using the org.apache.commons.net.ftp.ftpclient for everything.
這是我的代碼
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 比較文件修改日期,或者任何人都可以指出我做錯了什么的方向.謝謝.
It's getting the list of files, and then returning a file, it just isn't the latest file. Is there any other way to compare file modification dates using FTPClient or can anyone point me in a direction on what I'm doing wrong. Thanks.
推薦答案
我將創建一個比較器,而不是您的lastFileModified"方法.寫排序方法會更容易:
Instead of your "lastFileModified" method, I would create a Comparator. It would be easier to write the sort method:
public class LastModifiedComparator implements Comparator<FTPFile> {
public int compare(FTPFile f1, FTPFile f2) {
return f1.getTimestamp().compareTo(f2.getTimeStamp());
}
}
那么,獲取最后一個"FTPFile 就容易多了:
Then, getting the "last" FTPFile is much easier:
public FTPFile getMaxLastModified(FTPFile[] ftpFiles) {
return Collections.max(Arrays.asList(ftpFiles), new LastModifiedComparator());
}
<小時>
回到您的問題:lastModified"時間戳未鏈接到 FTP 上傳順序.當您通過 FTP 協議上傳文件時,可能會保留文件的原始時間戳.
To come back to your problem: the "lastModified" timestamp is not linked to the FTP upload order. When you upload a file through the FTP protocol, the original timestamp of the file may be preserved.
因此,如果 file1 早于 file2,您的方法將始終返回 file2,即使 file2 在 FTP 服務器上的 file1 之前上傳也是如此.
So, if file1 is older than file2, your method will always return file2, even if file2 is uploaded before file1 on the FTP server.
我認為不可能確定最后上傳的文件.FTP 協議不存儲此信息.只有當您重載 FTP 客戶端的put"方法時,您才能這樣做:
I think that it is impossible to determine the last uploaded file. This information is not stored by the FTP protocol. You can do that only if you overload the "put" method of your FTP client:
public void put(File file) {
// upload code
FTPFile ftpFile = getJustUploadedFile(file);
ftpFile.setTimestamp(new Calendar()); // Now!
}
這篇關于從 ftp 獲取最新文件的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!