文件不存在?线程“main”中的异常java.io.FileNotFoundException: - Java

时间:2014-03-12 02:16:41

标签: java filenotfoundexception

我正在为一个类的项目工作,我正在尝试创建一个读取文件并填充数组的方法。在方法内部,我还使用了另一种从我创建的类中调用的方法。我提示用户输入要读取的文件,无论我做什么,我都会收到文件不存在的错误。

这是我正在使用的开始代码:

 public static void main(String[] args) throws Exception {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the file to read from:");
    String readFile = input.nextLine();
    System.out.print("Enter the number of accounts in the file: ");
    int size = input.nextInt();
    Account[] Accounts = readFile(readFile, size);
    Account[] invalidAccounts = new Account[34];
    for (int i = 0; i < Accounts.length; i++) {
        String password = Accounts[i].getPassword();
        if (isValidPassword(password) == false) {
            invalidAccounts[i] = Accounts[i];
        }
    }
    createDistributionList(invalidAccounts);
}
public static Account[] readFile(String readFile, int size) throws Exception {
    Account[] Accounts = new Account[size];
    File myFile = new File(readFile);
    Scanner fileInput = new Scanner(myFile);
    for (int i = 0; i < Accounts.length; i++) {
            int stuID = fileInput.nextInt();
            String name = fileInput.next();
            String username = fileInput.next();
            String password = fileInput.next();
            Accounts[i] = new Account(stuID, name, username, password);
    }
    return Accounts;
}

如果我使用引号,这是我得到的痕迹:

Enter the file to read from:"studentdata.txt"
Enter the number of accounts in the file: 34
Exception in thread "main" java.io.FileNotFoundException: "studentdata.txt" (The filename, directory name, or volume label syntax is incorrect)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at java.util.Scanner.<init>(Scanner.java:656)
    at accountdriver.AccountDriver.readFile(AccountDriver.java:38)
    at accountdriver.AccountDriver.main(AccountDriver.java:25)
Java Result: 1

这是没有引号的痕迹:

Enter the file to read from:studentdata.txt
Enter the number of accounts in the file: 34
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:909)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextInt(Scanner.java:2160)
    at java.util.Scanner.nextInt(Scanner.java:2119)
    at accountdriver.AccountDriver.readFile(AccountDriver.java:40)
    at accountdriver.AccountDriver.main(AccountDriver.java:25)
Java Result: 1
BUILD SUCCESSFUL (total time: 7 seconds)

以下是正常运行的代码:

public static void main(String[] args) throws Exception {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the file to read from:");
    String readFile = input.nextLine();
    System.out.print("Enter the number of accounts in the file: ");
    int size = input.nextInt();
    Account[] Accounts = readFile(readFile, size);
    Account[] invalidAccounts = new Account[34];
    for (int i = 0; i < Accounts.length; i++) {
        String password = Accounts[i].getPassword();
        if (isValidPassword(password) == false) {
            invalidAccounts[i] = Accounts[i];
        }
    }
    createDistributionList(invalidAccounts);
}
public static Account[] readFile(String readFile, int size) throws Exception {
    Account[] Accounts = new Account[size];
    File myFile = new File(readFile);
    Scanner fileInput = new Scanner(myFile);
    for (int i = 0; i < Accounts.length; i++) {
            int stuID = fileInput.nextInt();
            String name = fileInput.nextLine();
            String username = fileInput.nextLine();
            String password = fileInput.nextLine();
            Accounts[i] = new Account(stuID, name, username, password);
    }
    return Accounts;
}

当我尝试读取字符串时,我只需要在每个fileInput.next的末尾添加Line。

3 个答案:

答案 0 :(得分:1)

stacktrace包含

  

“文件名,目录名称或卷标语法不正确”

建议名称中有特殊字符。看起来你在名字旁边加上了引号。

Enter the file to read from:"studentdata.txt"

如果文件名是源代码中的Java字符串,则使用引号,但是当通过控制台输入文本时,这些不是必需的。

答案 1 :(得分:0)

FileNotFoundException或者意味着您的文件(名称)不存在,或者文件位于错误的位置。

如果您要将文件路径读作"studentdata.txt",您需要了解的是,如果在IDE中工作,通常会尝试在当前工作目录中查找该文件,这是项目的根目录。所以你的文件需要在那里。

您可能只想使用绝对路径,而不是C:/path/to/file.txt

如果文件是嵌入式资源,您可能希望使用MyClass.class.getResourceAsStream(fileName)文件位于类路径中的位置。所以你可以做到

InputStream is = MyClass.class.getResourceAsStream(fileName);
Scanner scanner = new Scanner(is);

如果您要将文件名作为路径使用,那么您的文件将与您的类位于同一个包中。

所以你需要考虑一些事情。

答案 2 :(得分:0)

您需要将文本文件“studentdata.txt”复制并粘贴到NetbeansProjects位置内的项目文件(导航到特定项目名称)中。应该工作得很好!