使用try-catch处理FileNotFoundException

时间:2015-05-01 11:25:54

标签: java

static boolean exists(String location) {
        File path = new File(location);
        if (path.exists()){
            return true;
        }
        else {
            return false;
        }
    }

static boolean checkFile(String location1) throws IOException {
        if ( exists(location1) ) {
            File file = new File(location1);
            RandomAccessFile raf = new RandomAccessFile(file, "r");
            raf.seek( raf.length()-1 );
            byte lastByte = raf.readByte();
            raf.close();
            if (lastByte == 2) {
                return true;
            }
            else {
                return false;
            }
        }
        else {
            System.out.println("File does not exist, please try again: ");
            Scanner sk = new Scanner(System.in);
            String newLocation = sk.nextLine();
            checkFile(newLocation);
            sk.close();
            return false;

话虽如此,我已经用一个单独的方法检查文件是否存在,但是,我现在想通过以某种方式递归利用try-catch将上述内容压缩为单个方法:

static boolean checkFile(String location) {

        try {
            File file = new File(location);
        }
        catch (FileNotFoundException e) {
            System.out.println("File does not exist, please try again: ");
            Scanner sk = new Scanner(System.in);
            String newLocation = sk.nextLine();
            checkFile(newLocation);
        }

        //the following if-sentence checking whether some byte checks up.
    }

第一个问题:如何使用File file内部尝试创建新的随机访问文件?我尝试在尝试File file = null;之前尝试初始化它,但之后它会抛出NullPointer,因为在它捕获异常之后,该方法再次被调用,文件将自动为空。

另一个想法是在try-catch循环内do-while,但后来我在想什么呢?我必须检查文件是否存在,考虑到我已经使用try-catch做了什么,它变得多余了。

只要我输入的路径不是文件,然后在一个方法中继续try-catch句子,我该怎样对if做什么?

2 个答案:

答案 0 :(得分:1)

如果 使用try/catch,我真的不建议你这样做,你可以在“永远”循环中完成,就像这样。

public static FileReader readerForPromptedFile() {
    Scanner keyboard = new Scanner(System.in);
    while (true) {
        try {
            System.out.println("Please enter a file name");
            String fileName = keyboard.nextLine();
            return new FileReader(fileName);
        } catch (FileNotFoundException e) {
            System.out.println("File not found, please try again");
        }
    }
}

答案 1 :(得分:0)

这样的事情应该有效:

static boolean checkFile(String location) {

    while (!exists(location)){
        System.out.println("File does not exist, please try again: ");
        Scanner sk = new Scanner(System.in);
        String newLocation = sk.nextLine();         
    }

    try {
    //the following if-sentence checking whether some byte checks up.
    }
    catch (IOException e) {
        // Handle exception
    }
}

如果有合理的方法来检查它是否应该首先工作,那么使用一种可能抛出异常的方法通常不赞成 - 在这种情况下,行为不是真的异常,它&# 39;更多的前提条件。它还增加了相当大的性能开销。