Я использую Stream API, представленный на Java 8, для запуска метода для каждой строки в списке.Необработанное IOException внутри Java List.stream.forEach Lambda Expression
public boolean initFile() throws IOException
{
if (this.outFile.exists()) {
this.outFile.delete();
}
return this.outFile.createNewFile();
}
public void writeStringToFile(String str, boolean addNewLine) throws IOException
{
if (this.mode != FileMode.READ) {
if (this.initFile()) {
FileWriter fileWriter;
if (this.mode == FileMode.APPEND)
fileWriter = new FileWriter(outFile.getAbsolutePath(), true);
else
fileWriter = new FileWriter(outFile.getAbsolutePath());
fileWriter.write(str);
if (addNewLine)
fileWriter.write("\n");
fileWriter.close();
} else {
throw new IOException("IO Error: The file could not be initialized.");
}
} else {
throw new IOException("Cannot write to a file with the mode FileMode.READ");
}
}
public void writeListToFile(List<String> strings, boolean addNewLine) throws IOException
{
strings.stream().forEach(s -> this.writeStringToFile(s, addNewLine)); // Unhandled IOException from writeStringToFile
}
Как вы можете видеть, метод сигнатур состояний бросить все IOExceptions и метод writeToString внутри потока имеет потенциал, чтобы бросить IOException. Однако компилятор Java дает мне ошибку, заявляя, что в потоковой линии есть необработанное исключение IOException.
Почему исключение внутри потока не может быть выбрано как любое другое исключение внутри метода? Есть ли способ, которым я могу исправить это, не помещая инструкцию try-catch в выражение forEach лямбда?
Что вы хотите, если вы выбрали IOException? Обратите внимание, что это мало связано с лямбдами и довольно регулярными правилами исключения. 'Stream # forEach' и' Customer # accept' не объявляют об отказе от этого исключения. – Radiodef
Можете ли вы обновить свой вопрос с помощью объявления метода initFile – Sarkhan
Я добавил метод initFile. Обратите внимание, что все IOExceptions выбрасываются намеренно по дизайну. –