我正在编写一个检查文件是否存在的程序。如果它不存在则创建它。在此之后,它会读取文件。我收到一个"未处理的FileNotFoundException错误"在Eclipse中,当我尝试为它创建一个Scanner时。以下是代码段:
if(!NETWORK_FILE.exists()){
try {
NETWORK_FILE.createNewFile();
}catch(IOException e) {
e.printStackTrace();
}
}else{
//"ERROR" IS ON THE LINE BELOW
Scanner read = new Scanner(NETWORK_FILE);
while(read.hasNextLine()) {
String fileSerial = read.nextLine();
if(fileSerial.equals(serial)) {
System.out.println("serial already exists");
return;
}
}
read.close();
}
我认为捕获FileNotFoundException是没有意义的,因为我在此之前专门检查并创建了文件。有没有"首选方式"这样做?
答案 0 :(得分:0)
你的问题是有道理的
但是检查过的异常会以这种方式起作用
编译器不会在不同的逻辑处理之间建立任何关联
另请注意,应用程序可以是多线程的,文件系统可以由多个进程共享
一次存在的文件可能在1秒后不再存在。
在这种特定情况下,我认为我会在特定方法中提取异常处理,例如createScannerWithExistingFile()
会抛出RuntimeException
。它将构成整体代码逻辑
通过隔离此catch
语句更清楚:
if (!NETWORK_FILE.exists()) {
...
}
else {
Scanner read = createScannerWithExistingFile(NETWORK_FILE);
while (read.hasNextLine()) {
String fileSerial = read.nextLine();
if (fileSerial.equals(serial)) {
System.out.println("serial already exists");
return;
}
}
read.close();
}
private Scanner createScannerWithExistingFile(File file) {
try {
return new Scanner(file);
} catch (FileNotFoundException e) {
throw new RuntimeException("file " + f + " should exist", e);
}
}