Re: Closing Files that Weren't Successfully Opened
On 15 Mrz., 11:53, Michal Kleczek <klek...@gmail.com> wrote:
On Tue, 15 Mar 2011 03:41:15 -0700, Robert Klemme wrote:
If you want BufferedReader you can do
final BufferedReader reader =
new BufferedReader(new InputStreamReader(new
FileInputStream("foo.txt")));
try {
for (String line; (line = reader.readLine()) != null;) {
System.out.println("Found line: " + line);
}
}
finally {
reader.close();
}
That only works because both InputStreamReader and BufferedReader
constructors don't throw.
But it is not safe to do the same for:
final ObjectInputStream ois =
new ObjectInputStream(new FileInputStream("foo.txt"));
You just need to apply the same pattern several times:
final new FileInputStream fin = FileInputStream("foo.txt");
try {
final ObjectInputStream ois = new ObjectInputStream(fin);
try {
...
}
finally {
ois.close();
}
}
finally {
// multiple close() do not hurt!
fin.close();
}
Or you create a separate method for opening
private static ObjectInputStream open(String fileName) throws
IOException {
final new FileInputStream fin = FileInputStream("foo.txt");
boolean ok = false;
try {
final ObjectInputStream oin = new ObjectInputStream(fin);
ok = true;
return oid;
}
finally {
if (!ok) fin.close();
}
}
Or, a bit shorter:
private static ObjectInputStream open(String fileName) throws
IOException {
final new FileInputStream fin = FileInputStream("foo.txt");
try {
return new ObjectInputStream(fin);
}
catch (IOException e) {
fin.close();
throw e;
}
}
Kind regards
robert