2016-06-23 19 views
3

リモートの大きなcsvファイルを1行ずつ(基本的にストリーミング)読み込む必要があります。それぞれの読み込み後、私はdbにレコードを永続化したい。現在、私は以下のコードでこれを達成していますが、完全なファイルをダウンロードしてjvmのメモリに保存するかどうかはわかりません。私はそうではないと思う。私はまずリモートcsvファイルをダウンロードせずに読む

URL url = new URL(baseurl); 
HttpURLConnection urlConnection = url.openConnection(); 
if(connection.getResponseCode() == 200) 
{ 
    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
    String current; 
    while((current = in.readLine()) != null) 
    { 
     persist(current); 
    } 
} 

答えて

2

一部のJava 8ストリーム機能を使用して、より良い方法でこのコードを書くことができ、あなたは読み取りが行われたときに自動的にストリームを閉じますtry-with-resources statementを使用する必要があります。
BufferedReaderのメソッドはBufferedReader::linesで、Stream<String>を返します。
次に、あなたのコードは次のようになります。

URL url = new URL(baseurl); 
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
if (connection.getResponseCode() == 200) { 
    try (InputStreamReader streamReader = new InputStreamReader(connection.getInputStream()); 
     BufferedReader br = new BufferedReader(streamReader); 
     Stream<String> lines = br.lines()) { 
    lines.forEach(s -> persist(s)); //should be a method reference 
    } 
} 

は、今ではコードが優れていると、あなたの前提はあなたがJVMでファイル全体を保持していないことが適切かどうかを判断するのはあなた次第です。

+0

回答ありがとうございます。試してみます。 –

関連する問題