是否有标准(最好是Apache Commons或类似的非病毒)库用于在Java中进行"glob"类型的匹配?当我不得不在Perl中做类似的事情时,我只是将所有的" ."改为" \."," *"改为" .*"和" ?"改为" ."等等,但是我想知道是否有人做了为我工作.
类似的问题:从glob表达式创建正则表达式
我正在寻找一种方法来获取与给定目录中的模式(pref regex)匹配的文件列表.
我在网上找到了一个使用apache的commons-io包的教程,代码如下:
Collection getAllFilesThatMatchFilenameExtension(String directoryName, String extension)
{
File directory = new File(directoryName);
return FileUtils.listFiles(directory, new WildcardFileFilter(extension), null);
}
Run Code Online (Sandbox Code Playgroud)
但这只是返回一个基本集合(根据文档,它是一个集合java.io.File).有没有办法做到这一点,返回一个类型安全的通用集合?
我一直在尝试使用JDK7中的新globbing功能,从文档和示例开始
我可以得到像我这样"glob:*.dat"的人
Files.walkFileTree(startingDir, finder);
Run Code Online (Sandbox Code Playgroud)
例如,但我无法使"**"语法正常工作.我希望能够创建类似的东西:
matcher = FileSystems.getDefault().getPathMatcher("glob:" + "foo/**/bar/*.dat");
Run Code Online (Sandbox Code Playgroud)
并希望得到一个简单的例子.我使用的是Windows 7.
更新:@Oleg和@JBNizet清楚地表明"/"语法与操作系统无关.请注意,Javadocs建议也可以使用依赖于操作系统的语法(需要)
仍有问题:已采取@Nizet并编辑如下:
@Test
public void testStackoverflowGlobber() throws IOException {
final PathMatcher matcher =
FileSystems.getDefault().getPathMatcher("glob:*.cml");
Files.walkFileTree(Paths.get("d:/petermr-workspace/jumbo-converters/jumbo-converters-cli/src/test/resources"), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("try>> "+file);
if (matcher.matches(file)) {
System.out.println("MATCHES>>"+file);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
}
Run Code Online (Sandbox Code Playgroud)
这给出了如下输出:
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cdx
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cdxml
try>> d:\petermr-workspace\jumbo-converters\jumbo-converters-cli\src\test\resources\examples\cdx\r19.cml
try>> …Run Code Online (Sandbox Code Playgroud) 我需要实施
File[] files = getFiles( String folderName, String ptrn );
Run Code Online (Sandbox Code Playgroud)
其中ptrn是一个命令提示符样式模式,如"*2010*.txt"
我熟悉FilenameFilter类,但无法实现,
public boolean accept(File dir, String filename)
因为String.matches()不接受这样的模式.
谢谢!
我在相关目录(应用程序运行的目录)中有一些文件以'@'开头,我需要在java中打开所有这些文件.告诉我一个完成它的方法.如果它有帮助,我正在研究netbeans.它们基本上是.ser文件.所以我必须获取它们中的对象
嗨,我有一个脚本批量转换pdfs为一系列图像,我想做的是计算目录中扩展名为.jpg的文件总数.
到目前为止我有
for (file <- new File(path).listFiles) {
/* DO SOMETHING */
}
Run Code Online (Sandbox Code Playgroud)
有没有一种紧凑的方式来做到这一点而不循环遍历每个文件?
在此先感谢,非常感谢:)
我正在尝试在spark中加载一个镶木地板文件目录,但似乎无法让它工作......这似乎有效:
val df = sqlContext.load("hdfs://nameservice1/data/rtl/events/stream/loaddate=20151102")
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
val df = sqlContext.load("hdfs://nameservice1/data/rtl/events/stream/loaddate=201511*")
Run Code Online (Sandbox Code Playgroud)
它让我回到了这个错误:
java.io.FileNotFoundException: File does not exist: hdfs://nameservice1/data/rtl/events/stream/loaddate=201511*
Run Code Online (Sandbox Code Playgroud)
我如何使用外卡?
我选择使用该线程中的isFile()方法,该方法需要文件的绝对路径。
boolean doesFileExist = new File("C:/downloads/MyFile.txt").isFile();
Run Code Online (Sandbox Code Playgroud)
我已经使用 Selenium 和 Robot 类将文本文件保存到本地目录,但文件名是动态的:MyTextFile_YYYYMMDDHHMMSS.txt. 但是,MyTextFile_始终保持不变。我只想检查部分文件名匹配。
什么是优雅的方式来做到这一点?