2013-04-23 127 views
0

我只是在学习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"); 
} 

其中“目录”是我想看看在和“文件名”的目录中的字符串是我想查找的文件的确切文件名。这应该打印出文件是否在那里。

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

回答

0

看一看在

org.apache.commons.vfs2.FileSelector 

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

AllFileSelector,FileDepthSelector,FileFilterSelector,FileTypeSelector

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

0

我知道这个问题现在有点老了,但我今天来了,因为我正在实现一个需要通配符匹配的SFTP集成。我发现了一个Apache工具,可以做到这一点。 SelectorUtils

这可能是单独与建议,在实施FileSelector

的执行以前的答案使用