2017-09-01 36 views
1

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

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)); 
+1

当你推广代码,以减少重复,想想有什么变化。在这种情况下,文件名更改。通过创建一个方法来重构代码,该方法执行'任务'并将其传递'改变的事物'。 – Matt

+0

你在问什么?如何编写'for'循环? –

+0

我在问什么是减少重复代码的最佳方法,如BufferedReader的多个实例? –

回答

2

您创建一个小的辅助方法,像

private List<String> readFile(whatever) 

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

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

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

+0

在我看来,您在方法声明中绝对正确。其实,我的问题是如何做一个循环,以便分别读取每个文件。谢谢。 –

+0

查看我的更新。 – GhostCat

1

使用try-WITH-资源如下(上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(); 
     } 
    });