处理创建文件的首选方法(如果文件不存在)

时间:2018-01-19 21:43:21

标签: java exception-handling filenotfoundexception

我正在编写一个检查文件是否存在的程序。如果它不存在则创建它。在此之后,它会读取文件。我收到一个"未处理的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是没有意义的,因为我在此之前专门检查并创建了文件。有没有"首选方式"这样做?

1 个答案:

答案 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);
    }
}