所以我在那裏我試圖讀取文件裏逐行這個相當簡單的代碼:爪哇 - 逐行讀取一個txt文件行
if(new File(filesDir).listFiles() != null){
for(File file : new File(filesDir).listFiles()){
try {
Stream<String> stream = Files.lines(Paths.get(file.getAbsolutePath()));
for(int i = 0 ; i < stream.toArray().length; i++){
System.out.println(stream.toArray()[i]);
}
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但是,當它到達Sysout
它拋出異常:
異常在線程「主要」 java.lang.IllegalStateException:java.lang.IllegalStateException:流已經在操作或由封閉
引起:java.lang.IllegalStateException:流已經被OPERAT編輯或關閉
我找到的每個示例都使用Lambda表達式,我不認爲這是唯一的方法,還是它?
不要調用'listFiles()'兩次。這是一個磁盤密集型操作。 – EJP
@EJP如何調用toArray()每行輸入兩次(假設工作:) –
您可以使用['Files.list'](https://docs.oracle.com/javase/8/docs/api /java/nio/file/Files.html#list-java.nio.file.Path-)而不是使用'listFiles()'。 – Tunaki