Apache vfs:获取目录的最新更改文件(sftp)

时间:2010-01-04 17:15:21

标签: java apache-commons

我正在尝试从位于sftp服务器上的目录中提取最新文件。我现在这样做的方式或多或少:

public FileObject getLatestFile(String directory) throws FileSystemException {
    FileObject fo = fsManager.resolveFile(this.host+directory, fsOptions);
    FileObject latestFile = null;
    long max  = 0;
    fo.getContent().
    for (FileObject fob : fo.getChildren()){
        if (fob.getContent().getLastModifiedTime() > max) {
            max = fob.getContent().getLastModifiedTime();
            latestFile = fob;
        }
    }
    return latestFile;
}

这种方法的问题在于,每次调用方法时,我基本上都会下载给定目录中的每个文件。

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:3)

您没有下载内容。

如果您查看源代码:

/**
 * Returns the file's content.
 */
public FileContent getContent() throws FileSystemException
{
    synchronized (fs)
    {
        attach();
        if (content == null)
        {
            content = new DefaultFileContent(this, getFileContentInfoFactory());
        }
        return content;
    }
}

调用getContent只返回一个对象实现并获取大小,修改日期之类的属性,基本上它是在探索远程文件夹时提取的(每个协议都不同,但是例如当你列出一个FTP文件夹时,你获得所有文件属性)。

对于SFTP,你实际上称之为:

protected long doGetLastModifiedTime() throws Exception
{
    if (attrs == null
            || (attrs.getFlags() & SftpATTRS.SSH_FILEXFER_ATTR_ACMODTIME) == 0)
    {
        throw new FileSystemException(
                "vfs.provider.sftp/unknown-modtime.error");
    }
    return attrs.getMTime() * 1000L;
}

我同意,命名令人困惑,这意味着在调用getContent但实际上没有调用内容时会检索内容。