Так что у меня это довольно простой код, где я пытаюсь прочитать файл построчно:Java - Чтение текстовый файл построчно
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 ed at или closed
В каждом примере, который я нахожу, используются выражения Лямбда, я не думаю, что это единственный способ, или это так?
Не вызывайте '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