【发布时间】:2013-12-31 14:49:43
【问题描述】:
我是 Java 中自定义错误处理的相对新手,我正在尝试弄清楚如何使用 catch 语句在 if 语句中传递特定消息。我想在我完全想太多并且做得太过分之前,得到一些额外的眼睛来看看我正在尝试做的事情并提供反馈。
考虑: 我们有一个每小时日志文件的目录,我有一个按需报告作业,它创建了迄今为止创建的所有今天的日志文件的串联。我想添加一个检查级联日志文件是否存在的步骤,如果存在则删除它然后创建它,或者如果它不存在则只创建它。使用下面的代码,如果由于某种原因无法创建新文件,我将返回异常。
try {
File file = new File (destinationPath + "todayToNowLogFile.csv");
if(file.exists())
{
if(file.delete())
{
System.out.println(file.getName() + " is deleted!");
} else {
System.out.println("Existing file cannot be deleted.")
}
} else {
System.out.println("File will be created.");
}
}
//
catch(Exception e) {
System.err.println("Exception: ");
System.out.println("Exception: "+ e.getMessage().getClass().getName());
e.printStackTrace();
}
现在,在无法删除文件的情况下,我想显示阻止文件删除的异常。首先,我需要catch 那个错误,然后我把try 放在哪里?
做这样的事情......
try
{
if(file.delete())
{
System.out.println(file.getName() + " is deleted!");
}
}
else {
catch(Exception eDel) {
System.err.println("Exception: ");
System.out.println("Exception: "+ eDel.getMessage().getClass().getName());
eDel.printStackTrace();
}
}
....中断if...then 块。我不确定如何在if...then 中插入try...catch。有没有办法做到这一点?或者我的原始代码是否捕获了与try 块中定义的file 上的任何操作相关的每个错误,并且我需要将if...then 逻辑放入catch 块中,类似于此伪代码的行。 ...
catch(Exception e) {
if(exception relates to file deletion) {
"File delete exception " + exceptionMessages;
} else if(exception relates to file creation) {
"File create exception " + exceptionMessages;
} else if(other exception) {
"other exception " + exceptionMessage;
} else {
"no exceptions encountered"
}
}
处理这种情况最合适的方法是什么?
【问题讨论】:
-
java.io.File#delete仅在您无权删除文件时引发异常。如果您使用的是 Java 7,请考虑改用java.nio.file.Files#delete,因为它会针对更多情况抛出更详细的异常。 -
你把它放在
if块中,就像任何其他块一样,例如,另一个if。 -
您真正想要的是创建您的自定义异常。请参阅下面的我的回复。
标签: java error-handling