无需下载即可读取远程csv文件

时间:2016-06-23 04:47:30

标签: java csv java-8 java-stream

我要求逐行读取远程大csv文件(基本上是流式传输)。每次读取后我都想在db中保存记录。目前我通过下面的代码实现它,但我不确定它是否下载完整的文件并将其保存在jvm内存中。我认为不是。我可以使用一些java 8流功能以更好的方式编写此代码

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);
     }
 }

1 个答案:

答案 0 :(得分:2)

首先,您应该使用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中是正确的。