当前位置: 首页 > 面试题库 >

从ftp获取最新文件

山凌
2023-03-14
问题内容

尝试创建一个简单的插件,该插件仅连接到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! 
}


 类似资料:
  • 问题内容: 我正在使用ftplib连接到ftp站点。我想获取最新上传的文件并下载。我能够连接到ftp服务器并列出文件,我也将它们放在列表中并进行了转换。是否有任何功能/模块可以获取最新日期并从列表中输出整行? 解决: 一个问题,是否可以从字典中检索第一个元素?我在这里所做的是,for循环仅运行一次并退出,从而为我提供了一个很好的第一个排序值,但是我认为以这种方式进行操作不是一个好习惯。 问题答案:

  • 问题内容: 我正在尝试编写脚本以从Python中FTP服务器的最新子目录获取最新文件。我的问题是我无法找出最新的子目录。有两个选项可用,子目录具有ctime可用。在目录名称中还提到了日期,即在哪个日期创建了目录。但是我不知道如何获取最新目录的名称。我想出了以下方法(希望服务器端按最新的ctime排序)。我已经按照以下方式进行了操作,如果第一个对象是最新目录,它将可以正常工作。 但是,有什么方法可以

  • 我必须从FTP服务器下载最新文件。我知道如何从我的计算机下载最新文件,但我不知道如何从FTP服务器下载。 如何从FTP服务器下载最新文件? 这是我从电脑上下载最新文件的程序 好的,使用此代码我知道最后一个文件的日期,但我如何知道这个文件的名称?????????

  • 我需要下载一些大文件( 据我所读,有两种联系。数据和控制通道,其中数据通道似乎工作正常(我可以完全下载文件),但控制通道同时超时。我还了解到ftplib(和其他python ftp库)不适合大文件,可能只支持1GB左右的文件。这里有一个与此主题类似的问题:如何通过ftp(带监控)下载python中的大文件 我当前的代码如下所示: 我可以使用它或其他支持大文件的库吗?

  • 问题内容: 如何获取最新的文件名或添加到目录中的文件路径? 问题答案:

  • 如何将最新文档插入(一个独立的、没有RS的)MongoDb,而不是现有的集合? 如何在文档之后插入所有文档?