有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在不下载的情况下读取远程csv文件

我需要逐行读取远程大csv文件(基本上是流媒体)。每次读取后,我都想将记录保存在数据库中。目前我正在通过下面的代码实现它,但我不确定它是否下载了完整的文件并将其保存在jvm内存中。我想不是。我能用一些Java8流特性更好地编写这段代码吗

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) 个答案

  1. # 1 楼答案

    首先,当读取完成时,应该使用try-with-resources statement自动关闭流
    接下来BufferedReader有一个方法^{},它返回一个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中