【问题标题】:reading remote csv file without downloading无需下载即可读取远程 csv 文件
【发布时间】:2016-06-23 17:30:22
【问题描述】:

我需要逐行读取远程大 csv 文件(基本上是流式传输)。每次读取后,我想将记录保留在数据库中。目前我正在通过以下代码实现它,但我不确定它是否下载完整文件并将其保存在 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);
     }
 }

【问题讨论】:

    标签: java csv java-8 java-stream


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答我会试试看。
    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 2016-03-23
    • 2012-06-23
    • 2012-11-19
    • 1970-01-01
    • 2016-12-12
    • 2022-12-11
    • 2010-09-30
    相关资源
    最近更新 更多