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