Java 处理文件操作时,经常会遇到一个异常——文件找不到 FileNotFoundException。
异常成因
在以下情况下可能会引发此异常:
- 指定路径名的文件不存在
- 指定路径名的文件确实存在,但由于某种原因无法访问(请求写入只读文件,或权限不允许访问该文件)
异常处理
FileNotFoundException 是 java.io.IOException 异常的子类,处理这些异常都可以使用 try-catch 代码块。
在 catch 中,我们可要考虑如下操作:
- 引发特定业务的异常:这可能是停止执行错误,但您会将决定留在应用程序的上层(不要忘记包含原始异常)
- 通过对话或错误消息提醒用户:这不是停止执行错误,因此只需通知就足够了
- 创建文件:读取可选配置文件,没有找到它并使用默认值创建一个新文件
- 在另一个路径中创建一个文件:你需要写一些东西,如果第一个路径不可用,你尝试使用一个安全的路径
- 只需记录一个错误:此错误不应停止执行,但您将其记录下来以供将来分析
引发特定业务的异常
如果文件不存在,则把这个错误抛出,等后续的代码捕获到该异常做统一处理。
public void raiseBusinessSpecificException() {
try {
readFile();
} catch (FileNotFoundException ex) {
throw new BusinessException(
"BusinessException: 文件不存在", ex);
}
}
其中自定义的异常:
public class BusinessException extends RuntimeException {
// 自定义逻辑
}
记录异常
将异常状况记录到日志,这可能会打印到控制台或者记录到文件中。
public void logError() throws IOException {
try {
readFailingFile();
} catch (FileNotFoundException ex) {
log.error("文件 " + fileName + " 未找到.", ex);
}
}
创建文件
有时候,我们希望文件不存在时,创建一个文件:
public void createFile() throws IOException {
try {
readFailingFile();
} catch (FileNotFoundException ex) {
try {
new File(fileName).createNewFile();
readFailingFile();
} catch (IOException ioe) {
throw new RuntimeException(
"BusinessException: 创建文件失败", ioe);
}
}
}