仅使用一个 BufferedReader 对象读取 java 中的多个文件

Use only one BufferedReader object to read multiple files in java

我有多个基于 Java 的 BufferedReader 对象。我已经声明了许多 BufferedReader 对象来读取每个单独的文件,但问题是我如何才能让一个对象只用于读取文件以便每个循环使用 for?下面是我的示例源码,最好减少一下。

FileInputStream f1 = new FileInputStream(filepath);
BufferedReader b1 = new BufferedReader(new InputStreamReader(f1));

FileInputStream f2 = new FileInputStream(filepath);
BufferedReader b2 = new BufferedReader(new InputStreamReader(f2));

FileInputStream f3 = new FileInputStream(filepath);
BufferedReader b3 = new BufferedReader(new InputStreamReader(f3));

你创建一个小的辅助方法,比如

private List<String> readFile(whatever)

然后循环调用该方法。 BufferedReader 的想法是环绕 one 东西。考虑重置那个东西是没有意义的。使用类似:

for (String fileName : fileNames) {
  fileContents.addAll(readFile(fileName));
}

但是该循环的确切性质和该辅助方法的理想设计取决于您的要求的细节。

如下使用 Try-With-Resource(在 java8 上):REF

    List<String> filePathList = Arrays.asList("./a.txt", "./b.txt");
    filePathList.forEach(filePath -> {
        try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));){
            // Do something with bufferedReader
            // bufferedReader will be cleaned automatically in the end of try-catch block 
        }catch (Exception ex){
            ex.printStackTrace();
        }
    });

您可以将文件路径作为参数并创建一个包含所有文件路径的列表,而不是手动将其放入列表。上述 txt 示例:

File[] files = new File(args[0].replace("\", "\\")).listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".txt"); } });