我的java代码有缺陷,但我不明白为什么

时间:2011-03-24 15:22:47

标签: java java.util.scanner

我是java的新手,我遗漏了一些非常基本的东西。当我运行我的代码时,我试图为代码中创建的帐户增加价值。当我尝试运行代码时,我收到一个无法找到文件的错误,但我认为该文件是在代码中创建的。

import java.util.Scanner;
import java.io.File;
import java.io.IOException;

class DoPayroll
{
public static void main(String args[])
                                    throws
        IOException     
{
    Scanner diskScanner =
        new Scanner(new File("EmployeeInfo.txt"));

    for (int empNum = 1; empNum <= 3; empNum++)
    {
        payOneEmployee(diskScanner);
    }
}

static void payOneEmployee(Scanner aScanner)
{
    Employee anEmployee = new Employee();

    anEmployee.setName(aScanner.nextLine());
    anEmployee.setJobTitle(aScanner.nextLine());
    anEmployee.cutCheck(aScanner.nextDouble());
    aScanner.nextLine();
}
}

一旦运行我收到以下错误

Exception in thread "main" java.io.FileNotFoundException: EmployeeInfo.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.util.Scanner.<init>(Scanner.java:636)
at DoPayroll.main(jobexe.java:11)

我认为在上面的代码中使用new Scanner(new File("EmployeeInfo.txt")会在输入值后创建新文件。请给我一个简单的解决方案和解释。

6 个答案:

答案 0 :(得分:2)

写入时会创建一个新文件。但要从中读取,它必须已经存在。您可能希望通过

检查它是否存在
File file = new File("EmployeeInfo.txt");
if (file.exists()) {
    Scanner diskScanner = new Scanner(file);
    for (int empNum = 1; empNum <= 3; empNum++)
        payOneEmployee(diskScanner);
}

答案 1 :(得分:1)

File对象找不到您传递的文件名。您需要将EmployeeInfo.txt的完整路径传递给new File(...),或者确保当前工作目录是包含此文件的目录。

答案 2 :(得分:1)

File构造函数不会创建文件。相反,它创建了访问磁盘上文件所需的Java信息。您必须使用创建的File在Java中实际执行文件IO,才能创建新文件。

Scanner constructor需要现有的File。因此,您需要一个到EmployeeInfo.txt的真实有效位置的完整路径,或者首先使用文件I / O创建该文件。关于Java中I / O的This tutorial将有所帮助。

答案 3 :(得分:0)

您认为错误:D Scanner需要一个现有文件,这似乎非常合乎逻辑,因为它读取值并且没有现有文件难以阅读。 documentation还声明:

  

抛出:       FileNotFoundException - 如果找不到源

因此,简而言之:您必须向扫描仪提供可读的现有文件。

答案 4 :(得分:0)

您错误地实例化了一个类File实例,并实际将临时文件写入磁盘。走这条线

Scanner diskScanner =
        new Scanner(new File("EmployeeInfo.txt"));

并将其替换为

File newFile = File.createTempFile("EmployeeInfo", ".txt");
Scanner diskScanner = new Scanner(newFile);

编辑:彼得提出了一个很好的观点。我现在正面对着。

答案 5 :(得分:0)

正如另一个答案所解释的那样,该文件不是仅使用new File("EmployeeInfo.txt")创建的。 您可以使用

检查文件是否存在
File file = new File("EmployeeInfo.txt");
if(file.exists()) {
  //it exists
}

或者您可以使用

创建文件(如果它尚不存在)
file.createNewFile();

如果文件已创建,则该方法会返回true,如果已存在,则返回false