我刚学习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”进行某种通配符搜索吗?
答案 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实现的答案中的建议