0

我只是在学习 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”进行某种通配符搜索吗?

4

2 回答 2

0

看看

org.apache.commons.vfs2.FileSelector

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

AllFileSelector、FileDepthSelector、FileFilterSelector、FileTypeSelector

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

于 2013-05-30T13:59:53.740 回答
0

我知道这个问题现在有点老了,但我今天遇到了它,因为我正在实施需要通配符匹配的 SFTP 集成。我找到了一个 Apache 实用程序可以做到这一点。 选择器实用程序

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

于 2015-02-04T16:05:03.583 回答