Это немного тревожно, как многие из этих ответов оставляют дескриптор файла открытым в случае ошибки. Ответ https://stackoverflow.com/a/15053443/2498188 на деньги, но только потому, что BufferedWriter()
не может бросить. Если бы это могло, то исключение оставило бы объект FileWriter
открытым.
Более общий способ сделать это, который не заботится о том, может ли BufferedWriter()
вызывать:
PrintWriter out = null;
BufferedWriter bw = null;
FileWriter fw = null;
try{
fw = new FileWriter("outfilename", true);
bw = new BufferedWriter(fw);
out = new PrintWriter(bw);
out.println("the text");
}
catch( IOException e ){
// File writing/opening failed at some stage.
}
finally{
try{
if( out != null ){
out.close(); // Will close bw and fw too
}
else if( bw != null ){
bw.close(); // Will close fw too
}
else if( fw != null ){
fw.close();
}
else{
// Oh boy did it fail hard! :3
}
}
catch( IOException e ){
// Closing the file writers failed for some obscure reason
}
}
Начиная с Java 7, рекомендуется использовать «попробовать с ресурсами» и позволить JVM справиться с этим:
try( FileWriter fw = new FileWriter("outfilename", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)){
out.println("the text");
}
catch( IOException e ){
// File writing/opening failed at some stage.
}
Хорошо, оказывается, мне пришлось изменить .end()
на .end(file.buffer)