Исключение исходит из метода close()
, если вы видите сигнатуру метода close()
в FileInputStream
/ FileOutputStream
:
public void close() throws IOException
У него есть предложение throws для проверенного исключения IOException
, поэтому вам нужно его обработать.
Кроме того, поскольку вы используете блок try-with-resources, это не очевидно, поскольку вы явно не закрываете его.
Ресурсы, открытые в блоке try
, закрываются автоматически, вызывая метод close
при выходе из него, при условии, что ресурсы реализуют интерфейс AutoCloseble
, иначе вы не сможете использовать их в try-with-resources ,
Если вы не вызовете метод close()
(что плохо) в FileInputStream
/ FileOutputStream
, тогда вам не нужно обрабатывать IOException
, скомпилируется следующее:
try {
FileInputStream in = new FileInputStream("./TestDir/IOfile.txt");
FileOutputStream out = new FileOutputStream("./TestDir/IOfile_out.txt");
byte[] buffer = new byte[100];
// more operations
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Тогда, если вы правильно закроете ресурсы, в блоке finally:
try {
in = new FileInputStream("./TestDir/IOfile.txt");
out = new FileOutputStream("./TestDir/IOfile_out.txt");
byte[] buffer = new byte[100];
// more operations
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
if(in!=null && out!= null) {
in.close();
out.close();
}
}catch (IOException io){
io.printStackTrace();
}
}
Вы должны были бы справиться с этим.