这可能是一个愚蠢的问题,但我无法在其他任何地方找到答案。我有一个类将读取和写入文件进行保存。现在,我正在尝试处理可能出现的一些错误。我想知道的是,这是否是Java中的合法或通用做法:
try {
in = new ObjectInputStream(new FileInputStream(fileName));
score = (Score)in.readObject();
} catch() {
...
}
我遇到的问题是如果文件为空,则无法读取文件。该程序将崩溃,所以我想知道常见或常规的做法是从catch语句创建文件中的一些数据,然后再次尝试/捕获它。然后在第二次捕获我可以崩溃程序。
我想要这样做的原因是用户擦除文件中的数据。
如果这是合法的,这会是语法吗?
try {
// try something here
} catch(//Exception here) {
// Create a new file and try again.
try {
// try again
} catch() {
// Crash the program
}
}
答案 0 :(得分:1)
为什么不在尝试使用之前检查文件是否存在或是空的?
try {
File file = new File( fileName);
if( !file.exists() || file.length() == 0) {
// Create the file, initialize it with some default value
}
in = new ObjectInputStream(new FileInputStream( file));
score = (Score)in.readObject();
} catch() {
...
}
请注意,存在一个小竞争条件,用户可以在检查文件存在之间删除文件,并在FileInputStream
内实际使用该文件。
答案 1 :(得分:0)
在catch块中做这样的工作通常是不好的形式。如果要在失败时重试,请使用类似
的循环int retryCount = 0;
boolean success = false;
while(!success && retryCount < 2) {
retryCount++;
try {
...
success = true;
} catch (Exception ex) {
// log exception
}
}