簡體   English   中英

使用BufferedReader讀取多個文件

[英]Reading multiple files using BufferedReader

我想使用一個BufferedReader對象從兩個或更多文件中讀取文本。

這就是我在代碼中做到的方式。

Charset charset = Charset.forName("UTF-8");
Path p1 = Paths.get("sum1.csv");

List<String> list = new ArrayList<String>();
BufferedReader reader = Files.newBufferedReader(p1, charset);
try {
    String line;
    while((line = reader.readLine()) != null && !line.isEmpty()){
        list.add(line);
    }
} catch (IOException e) {
    System.err.format("IOException: %s%n", e);
    reader.close();
}

Path p2 = Paths.get("sum2.csv");
reader = Files.newBufferedReader(p2, charset);
try {
    String line;
    while((line = reader.readLine()) != null && !line.isEmpty()){
        list.add(line);
    }
} catch (IOException e) {
    System.err.format("IOException: %s%n", e);
    reader.close();
}

該代碼已編譯並正確運行。

解決此問題的標准方法是什么? 是否可以使用單個BufferedReader讀取兩個或更多文件?

Charset charset = Charset.forName("UTF-8");
List<String> list = new ArrayList<String>();
try(
  FileInputStream is1=new FileInputStream("sum1.csv");
  FileInputStream is2=new FileInputStream("sum2.csv");
  SequenceInputStream is=new SequenceInputStream(is1, is2);
  BufferedReader reader=new BufferedReader(new InputStreamReader(is, charset));)
{
  try {
      String line;
      while((line = reader.readLine()) != null && !line.isEmpty()){
          list.add(line);
      }
  } catch (IOException e) {
      System.err.format("IOException: %s%n", e);
  }
}

順便說一句,你的意思是

String line;
while((line = reader.readLine()) != null)
  if(!line.isEmpty()) list.add(line);

為你的內循環? 您的代碼在第一個空行處停止,我建議的替代方法將跳過空行。 但是我只能猜測你的真實意圖。

在上面的代碼中,您確實創建了一個新的BufferedReader以從第二個文件讀取。 盡管將重復的代碼放入以文件名和字符串列表作為參數的方法中,這是很有意義的,但是您所做的一切都很好。

您會有一個小故障-如果兩個文件中間都有一個空行,則程序在到達文件時將停止讀取。 我不確定這是否真的是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM