![](/img/trans.png)
[英]Reading multiple files using BufferedReader(with String[] args)
[英]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.