Метод постоянно выбрасывает исключение. Метод наполняет исходящие файлы данными, принимая @param PathsIn, коллекцию путей исходящих файлов
public static void fillTheFiles() {
System.out.println("Введите входные данные:");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
for (String path : Starter.getPathsIn()) {
try (BufferedWriter bufferedWriter = Files.newBufferedWriter(Path.of(path), StandardCharsets.UTF_8)) {
String line;
while (!"quit".equalsIgnoreCase(line = bufferedReader.readLine())) {
bufferedWriter.append(line);
bufferedWriter.append("\n");
}
} catch (IOException e) {
System.err.println("Нет доступа к пути " + path);
e.printStackTrace();
}
}
}
Метод должен Считывать с консоли и записывать ее в файлы, пути которых хранятся в коллекции
Нет доступа к пути C:\Users\Anna\OneDrive\Рабочий стол\Java\Shift\Shift\in.txt
java.io.IOException: Stream closed
at java.base/java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:168)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:270)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:313)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:177)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:162)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:329)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:396)
at CFT.DataMaker.fillTheFiles(DataMaker.java:93)
at CFT.Main.main(Main.java:12)
Нет доступа к пути C:\Users\Anna\OneDrive\Рабочий стол\Java\Shift\Shift\in2.txt
java.io.IOException: Stream closed
at java.base/java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:168)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:270)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:313)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:177)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:162)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:329)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:396)
at CFT.DataMaker.fillTheFiles(DataMaker.java:93)
at CFT.Main.main(Main.java:12)
Process finished with exit code 0
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Данная ошибка НЕ воспроизводится в представленном коде.
Однако, не исключено что входной поток System.in закрывается в каком-нибудь другом методе, что и вызывает исключение java.io.IOException: Stream closed, например, из-за использования try-with-resources.
Слегка модифицированная версия кода с добавленными отладочными сообщениями:
public static void fillTheFiles() {
System.out.println("Введите входные данные:");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
for (String path : Starter.getPathsIn()) {
try (BufferedWriter bufferedWriter = Files.newBufferedWriter(Path.of(path), StandardCharsets.UTF_8)) {
System.out.println("Начинаем запись в файл: " + path);
String line;
while (!"quit".equalsIgnoreCase(line = bufferedReader.readLine())) {
bufferedWriter.append(line);
bufferedWriter.append("\n");
}
System.out.println("Запись в файл: " + path + " успешно завершена");
} catch (IOException e) {
System.err.println("Нет доступа к пути " + path);
e.printStackTrace();
}
}
}
static class Starter {
static List<String> getPathsIn() {
return Arrays.asList("out1.txt", "out2.txt", "out3.txt");
}
}
public static void main(String[] args) {
fillTheFiles();
}
Тест: содержимое консоли:
Введите входные данные:
Начинаем запись в файл: out1.txt
111 222
333 444
555 666
йгше
quit
Запись в файл: out1.txt успешно завершена
Начинаем запись в файл: out2.txt
zzz xxx yyy uuu
ccc bbb aaa ddd
010101
quit
Запись в файл: out2.txt успешно завершена
Начинаем запись в файл: out3.txt
asdf qwer
zxcx vbvbv
ФЫВА ОЛДЖ!
quit
Запись в файл: out3.txt успешно завершена
Process finished with exit code 0
