Нет, вам нужно только закрыть самый внешний поток. Он будет делегировать весь путь завернутым потокам.
Однако ваш код содержит один концептуальный сбой, закрытие должно произойти в finally
, в противном случае он никогда не закрывается, когда код вызывает исключение между открытием и закрытием.
* 1006 Е.Г. *
public static void main(String args[]) throws IOException {
PrintStream ps = null;
try {
ps = new PrintStream(new FileOutputStream("myfile.txt"));
ps.println("This data is written to a file:");
System.out.println("Write successfully");
} catch (IOException e) {
System.err.println("Error in writing to file");
throw e;
} finally {
if (ps != null) ps.close();
}
}
(обратите внимание, что я изменил код на throw исключение, чтобы вы поняли причину проблемы, исключение, а именно содержит подробную информацию о причине проблемы)
Или, когда вы уже находитесь в Java 7, вы также можете использовать ARM (Автоматическое управление ресурсами; также известное как try-with-resources ), так что вам не нужно закрой что-нибудь сам:
public static void main(String args[]) throws IOException {
try (PrintStream ps = new PrintStream(new FileOutputStream("myfile.txt"))) {
ps.println("This data is written to a file:");
System.out.println("Write successfully");
} catch (IOException e) {
System.err.println("Error in writing to file");
throw e;
}
}