关闭 Java Input/Output 流
Closing Java Input/Output streams
这是我的代码:
FileOutputStream fos = null;
DataOutputStream dos = null;
try {
fos = new FileOutputStream(file);
dos = new DataOutputStream(fos);
.... writing to file ....
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (dos != null) {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我读到你只需要关闭 DataOutpustStream
它将关闭所有其他流,这是正确的吗?如果我关闭 FileOutputStream
有什么坏处吗?关闭流的最佳方法是什么?
关闭流的最佳方式是在您使用 try-resource-blocks 时。
在大多数情况下,流以级联方式关闭。要获得答案,您必须仔细查看 API.
不,它没有任何危害
您需要按照打开它们的相同顺序关闭它们 - 将它们视为彼此的包装器。如果您创建一个 FileOutputStream
然后将其包装在 DataOutputStream
中,您应该先关闭 DataOutputStream
。
但你应该使用 try-with-resources
:
try (
final FileOutputStream fos = new FileOutputStream(file);
final DataOutputStream dos = new DataOutputStream(fos);
) {
....writing to file....
} catch (IOException e) {
e.printStackTrace();
}
而如果你用同样的方式处理这两个异常,你只能捕捉到更一般的IOException
。
这是我的代码:
FileOutputStream fos = null;
DataOutputStream dos = null;
try {
fos = new FileOutputStream(file);
dos = new DataOutputStream(fos);
.... writing to file ....
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (dos != null) {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我读到你只需要关闭 DataOutpustStream
它将关闭所有其他流,这是正确的吗?如果我关闭 FileOutputStream
有什么坏处吗?关闭流的最佳方法是什么?
关闭流的最佳方式是在您使用 try-resource-blocks 时。 在大多数情况下,流以级联方式关闭。要获得答案,您必须仔细查看 API.
不,它没有任何危害
您需要按照打开它们的相同顺序关闭它们 - 将它们视为彼此的包装器。如果您创建一个 FileOutputStream
然后将其包装在 DataOutputStream
中,您应该先关闭 DataOutputStream
。
但你应该使用 try-with-resources
:
try (
final FileOutputStream fos = new FileOutputStream(file);
final DataOutputStream dos = new DataOutputStream(fos);
) {
....writing to file....
} catch (IOException e) {
e.printStackTrace();
}
而如果你用同样的方式处理这两个异常,你只能捕捉到更一般的IOException
。