【问题标题】:read whole file in a folder读取文件夹中的整个文件
【发布时间】:2011-07-04 02:14:30
【问题描述】:

在 Java 中有没有一种方法可以让我在 java 中指定一个目录,然后它会一个接一个地读取整个文件?

否则有没有办法在 java 中读取正则表达式文件?所以如果文件夹中的所有文件都以 gh001_12312 gh002_12312、gh003_12911、gh004_22222、gh005_xxxxx 等开头

【问题讨论】:

  • @Andrew Thompson,非常不应该的行为。
  • 有时有些功能可能是您以前不知道的神奇功能,但其他功能却有
  • 我同意。就个人而言,我不知道 @Pangea 提到的 API,并认为它们看起来很有趣。

标签: java java-io


【解决方案1】:

您可以结合使用commons-io 中的以下方法。第一种方法使您可以选择递归地遍历目录中与特定扩展名匹配的所有文件(还有另一个重载方法允许您提供自己的过滤器)。第二种方法将文件的全部内容作为 String 对象读取。

Iterator<File> iterateFiles(File directory,
                                          String[] extensions,
                                          boolean recursive)
String readFileToString(File file)
                               throws IOException

【讨论】:

  • 如果我不想使用 commons-io 怎么办
  • 你也可以在 File (isDirectory(), listFiles()), FileNameFilter 和 BufferedReader 的帮助下做到这一点......这里很少有 exampledepot.com/egs/java.io/GetFiles.html
【解决方案2】:

标准 Java 库提供了一种获取 File 元素数组的方法,这些元素位于通过 File#listFiles 的目录中。 基本上:

File theDirectory = new File("/home/example");
File[] children = theDirectory.listFiles();

此外,还有一个重载方法允许指定过滤器,该过滤器可用于修剪列表中返回的元素。

File theDirectory = new File("/home/example");
File[] children = theDirectory.listFiles(new FileFilter(){
    public boolean accept(File file) {
        if (file.isFile()) {
           //Check other conditions
           return true;
        }
        return false;
    }
});

如果您还想根据文件名进行一些过滤,请查看StringPatternMatcher。如果您知道只有文件或文件将遵循特定的命名约定,那么还有一个 File.listFiles(FilenameFilter) 选项,它只提供一个表示文件名的字符串。

【讨论】:

  • 有没有办法将 BufferedReader 读取为一个完整的字符串,而不是执行 input.readLine(),您必须逐行执行?
  • @EquinoX,我不知道。
【解决方案3】:

我在这里重用@Tim Bender 的代码:

首先获取所有所需文件的列表,如@Tim Bender 所示(为了完整起见,此处再次显示)。并且不需要第三方库。

File theDirectory = new File("/home/example");
File[] children = theDirectory.listFiles(new FileFilter(){
    public boolean accept(File file) {
        if (file.isFile()) {
           //Check other conditions
           return true;
        }
        return false;
    }
});

现在遍历这个数组并使用java.nio API 一次性读取文件(不带br.readLine()

public StringBuilder readReplaceFile(File f) throws Exception
{
    FileInputStream fis = new FileInputStream(f);
    FileChannel fc = fis.getChannel();

    int sz = (int)fc.size();
    MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz);

    CharBuffer cb = decoder.decode(bb);

    StringBuilder outBuffer = new StringBuilder(cb);
    fc.close();
    return outBuffer;
}

希望有帮助

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 2013-04-15
    • 2017-04-21
    • 1970-01-01
    • 2011-08-27
    • 2011-10-24
    • 2013-05-30
    • 2015-07-19
    相关资源
    最近更新 更多