对象未初始化不确定原因

时间:2017-04-18 20:37:31

标签: java file exception io

我正在尝试从文本文件中读取一些内容。 .txt文件和代码都在我当前的工作目录中。我收到错误fInput可能尚未初始化。我相信这是因为我的程序是我的catch语句而不是try。

这是我的代码段:

Scanner fInput;
        try {
            fInput = new Scanner(new File("accountData.txt"));
        }
        catch(Exception e) {
            System.out.println("ERROR: File Not Found.");
        }
        while(fInput.hasNext()) {
            String tempID = fInput.next();
            String tempFName = fInput.next();
            String tempLName = fInput.next();
            String tempPNumber = fInput.next();
            String tempEmail = fInput.next();

            System.out.println(tempID+""+tempFName+""+tempLName+""+tempPNumber+""+tempEmail);
        }

有人能说清楚我为什么会这样做吗?感谢。

1 个答案:

答案 0 :(得分:0)

是的,问题是如果try阻止了异常,那么fInput之后就不会初始化catch。因此,编译器无法保证fInput在到达while循环时将被初始化。如果您仍然希望以这种方式使用Scanner,则可以通过两种方式修复当前代码:

  1. try

    中运行循环
    Scanner fInput;
    try {
        fInput = new Scanner(new File("accountData.txt"));
        while(fInput.hasNext()) {
            String tempID = fInput.next();
            String tempFName = fInput.next();
            String tempLName = fInput.next();
            String tempPNumber = fInput.next();
            String tempEmail = fInput.next();                
            System.out.println(tempID+""+tempFName+""+tempLName+""+tempPNumber+""+tempEmail);
        }
    }
    catch(Exception e) {
        System.out.println("ERROR: File Not Found.");
    }
    
  2. 使用支票确保无效安全:

    Scanner fInput = null; //This change is important!
    try {
        fInput = new Scanner(new File("accountData.txt"));
    }
    catch(Exception e) {
        System.out.println("ERROR: File Not Found.");
    }
    if(fInput!=null) {
        while(fInput.hasNext()) {
            String tempID = fInput.next();
            String tempFName = fInput.next();
            String tempLName = fInput.next();
            String tempPNumber = fInput.next();
            String tempEmail = fInput.next();
            System.out.println(tempID+""+tempFName+""+tempLName+""+tempPNumber+""+tempEmail);
        }
    }
    
  3. 其中任何一个都会避免你的例子中可怕的NullPointerException