سلام، بستن stream ها بعد از اتمام کارمون به این دلیله که اولا منابعی که برای stream استفاده شده بود آزاد بشه، دوم اینکه مثلا وقتی از File Stream استفاده میکنیم با بستن stream فایل آزاد بشه و اجازه استفاده از اون فایل به دیگران هم داده بشه.
بستن InputStream ها خوبه ولی در مورد OutputStream ها باید حواسمون باشه قبل از بستن stream متد flush رو کال کنیم چون ممکنه بافر از دست بره، یعنی :
FileOutputStream fileOutputStream = new FileOutputStream(file);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
writer.write("...");
writer.flush();
writer.close();
fileOutputStream.close();
از jdk 7 به بعد هم که کار با try with resources راحت تر هم شده و حتی دیگه نیازی به flush کردن هم نیست :
try (FileOutputStream fileOutputStream = new FileOutputStream("path");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream))) {
writer.write("...");
}