Apache Commons VFS可以进行通配符搜索吗?

时间:2013-04-23 00:55:10

标签: java wildcard apache-commons vfs

我刚学习Apache Commons VFS。我想在某个目录中搜索文件,但我不知道该文件的确切名称。但是,我知道该名称的一部分。

要搜索文件,我认为我可以这样做:

FileSystemManager manager = VFS.getManager();
FileObject file = manager.resolveFile(directory + "/" + filename);

if (file.exists()) {
    System.out.println("File found");
} else {
    System.out.println("File not found");
}

其中“directory”是我想查看的目录的String,“filename”是我想要查找的文件的确切文件名。那应该打印出文件是否存在。

当我不知道文件的确切名称时,我想知道我是否可以做类似的事情,但我确实知道它的一部分。例如,如果我知道文件名以“foo.txt”结尾,我可以对“* foo.txt”进行某种通配符搜索吗?

2 个答案:

答案 0 :(得分:0)

看看

org.apache.commons.vfs2.FileSelector

您可以找到以下标准实现:

AllFileSelector,FileDepthSelector,FileFilterSelector,FileTypeSelector

FileFilter 源自 FileDepthSelector ,它可能与您可以获得的最接近。 您可以使用此实现来实现自己的“基于通配符”的sselector。 所有这些Selector都像过滤器一样工作。它们是遍历文件系统时filesystemmanager的回调。您的过滤器将决定文件是否在选择中。 从FileDepthSelector派生FileFilter的优点是可以限制所经历的文件系统的目录深度级别。 总的来说这是一个很好的方法,因为你可以实现其他类型的过滤器,如文件修改时间 - 但是他们可以提供一个通配符过滤器,如果你想到像(* a * b.doc *)这样的过滤器,这个过滤器就不容易实现了。 希望这会有所帮助。

答案 1 :(得分:0)

我知道这个问题现在已经略显陈旧但我今天遇到了这个问题,因为我正在实施需要外卡匹配的SFTP集成。我发现了一个Apache实用程序就是这样做的。 SelectorUtils

这可以单独使用上一个实现FileSelector实现的答案中的建议