我正在为一个类的项目工作,我正在尝试创建一个读取文件并填充数组的方法。在方法内部,我还使用了另一种从我创建的类中调用的方法。我提示用户输入要读取的文件,无论我做什么,我都会收到文件不存在的错误。
这是我正在使用的开始代码:
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。
答案 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位置内的项目文件(导航到特定项目名称)中。应该工作得很好!