【问题标题】:How to use wildcards in filenames when reading in files读取文件时如何在文件名中使用通配符
【发布时间】:2021-07-09 09:45:03
【问题描述】:

我正在开发一个将读取 SystemOut.Log 文件并对其进行处理的应用程序。有时存档文件的名称可能略有不同,例如 SystemOut_10:20_09/07/2021-10:45_09/07/2021.Log。它的形式总是 SystemOut(Some more text here).Log.

我稍微阅读并偶然发现了通配符并得出结论,如果我将 SystemOut*.Log 作为文件名传递到我的应用程序中,它将起作用。但我错了。

我最初通过这样的属性文件获取我的文件名。

fileName=prop.getProperty("fileName");

然后我只是尝试在最后连接*.Log

fileName=fileName+"*.Log";

当我打印出 fileName 时,它是“SystemOut*.Log”,但是当我将此文件名传递给读取文件的方法时,它不起作用,因为找不到具有该名称的文件。

我是在代码中出错了,还是我误解了通配符的工作原理?谢谢

【问题讨论】:

标签: java wildcard


【解决方案1】:

Apache commons-io 尝试FileUtils(listFiles 和 iterateFiles 方法): 你需要的代码是

File dir = new File(".");
FileFilter fileFilter = new WildcardFileFilter("*.Log");
File[] files = dir.listFiles(fileFilter);
for (int i = 0; i < files.length; i++) {
   System.out.println(files[i]);
}

【讨论】:

  • 哦,太好了,谢谢你,我没有意识到你必须采取这些额外的步骤。我错误地认为您可以将其传递到文件名中。我现在将安装 Apache 并进行排序,谢谢
  • *.x 被称为 globbing 并且是 shell 的一个特性,因此只能在那里工作。提出的解决方案是您需要的那种东西,但不需要 3rd 方 api 来做到这一点。
  • @g00se 只是出于兴趣,那么您将如何使用内置 API 来做到这一点?
  • 奇怪的是在 api 中有 两个 类:FileFilterFilenameFilter
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2016-07-24
  • 2012-05-28
  • 2017-06-26
相关资源
最近更新 更多