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

时间:2017-09-01 05:38:06

标签: java bufferedreader

我有多个基于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));

3 个答案:

答案 0 :(得分:2)

您可以创建一个小辅助方法,例如

private List<String> readFile(whatever)

然后在循环中调用该方法。 BufferedReader的想法是包装一个的东西。考虑重置那件事是没有意义的。使用类似的东西:

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

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

答案 1 :(得分:2)

您可以将文件路径放入参数并创建包含所有文件路径的列表,而不是手动将其列入列表。前面提到的txt的例子:

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

答案 2 :(得分:1)

使用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();
        }
    });