【发布时间】:2010-10-22 02:49:11
【问题描述】:
这应该很简单。如果我有这样的字符串:
../Test?/sample*.txt
那么获取与此模式匹配的文件列表的普遍接受的方法是什么? (例如,它应该匹配 ../Test1/sample22b.txt 和 ../Test4/sample-spiffy.txt 但不匹配 ../Test3/sample2.blah 或 ../Test44/sample2.txt)
我查看了org.apache.commons.io.filefilter.WildcardFileFilter,它似乎是正确的野兽,但我不确定如何使用它在相对目录路径中查找文件。
我想我可以查看 ant 的源代码,因为它使用通配符语法,但我必须在这里遗漏一些非常明显的东西。
(edit:上面的例子只是一个示例。我正在寻找在运行时解析包含通配符的一般路径的方法。我根据 mmyers 的建议想出了如何做到这一点但这有点烦人。更不用说 java JRE 似乎从单个参数自动解析 main(String[] arguments) 中的简单通配符以“节省”我的时间和麻烦......我很高兴我混合中没有非文件参数。)
【问题讨论】:
-
这是解析通配符的shell,而不是Java。您可以转义它们,但具体格式取决于您的系统。
-
不,不是。 Windows 不解析 * 通配符。我通过在一个虚拟批处理文件上运行相同的语法并打印出参数 #1 来检查这一点,该参数是 Test/*.obj 指向一个充满 .obj 文件的目录。它打印出“Test/*.obj”。 Java 似乎在这里做了一些奇怪的事情。
-
呵呵,你说得对;几乎所有内置 shell 命令都扩展通配符,但 shell 本身没有。无论如何,您可以将参数放在引号中以防止 Java 解析通配符: java MyClass "Test/*.obj"
-
6 年多之后,对于那些讨厌滚动并希望使用 Java >=7 零深度解决方案的人,请参阅@Vadzim 的answer below 并点赞,或者对docs.oracle.com/javase/tutorial/essential/io/find.html 进行详细的讨论/厌烦