2017-09-01 2 views
1

Javaベースの複数のBufferedReaderオブジェクトがあります。私は多くのBufferedReaderオブジェクトをそれぞれ別々のファイルを読み込むために宣言しましたが、問題はどのようにしてforとループするためにファイルを読み込むためのオブジェクトを1つしか持てないのですか?ここにサンプルソースコードがありますが、それを減らす方が良いです。1つの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

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