java - 我的 do while 循环询问用户新文件时遇到问题是前一个不起作用
问题描述
我正在编写一些获取用户文件然后对信息进行排序的代码,但是我在编写程序时遇到了麻烦,因此如果用户输入了错误的文件名,程序不会停止,而是给他们另一个机会输入正确的文件.
我想我可以用 do while 来做到这一点,它说在文件不存在时要求重复读取文件,但这似乎不起作用
public void readText(int ages[], String names[]) throws FileNotFoundException{
String filename = "";
Scanner inputFile = new Scanner(System.in);
do {
System.out.println("File to read from:");
filename = inputFile.nextLine();
File file = new File(filename);
inputFile = new Scanner(file);
}
while (!new File(filename).exists());
while (inputFile.hasNextLine()) {
String data = inputFile.nextLine();
String[] parts = data.split("(?<=\\))(?=\\()");
for (String part : parts) {
String input = part.replaceAll("[()]", "");
ages[count] = Integer.parseInt(input.split(", ")[0]);
names[count] = input.split(", ")[1];
count++;
}
}
}
当我尝试输入一个不存在的假文件时,它要求再次读取一个文件,我得到的是和异常。示例:要读取的文件:nothing.txt(这不存在只是希望它再次询问我)然后它给了我以下异常:
Exception in thread "main" java.io.FileNotFoundException: nothing.txt (The system cannot find the file specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.util.Scanner.<init>(Scanner.java:611)
at PonySort.readText(PonySort.java:95)
at PonySort.main(PonySort.java:30)
解决方案
您正在尝试Scanner
在第一个do-while
循环中创建一个文件,这会导致FileNotFoundException
. 因此,请在找到如下有效文件后执行此操作。
public void readText(int ages[], String names[]) throws FileNotFoundException{
String filename = "";
Scanner inputFile = new Scanner(System.in);
File file;
do {
System.out.println("File to read from:");
filename = inputFile.nextLine();
file = new File(filename);
} while (!file.exists());
inputFile = new Scanner(file);
while (inputFile.hasNextLine()) {
String data = inputFile.nextLine();
String[] parts = data.split("(?<=\\))(?=\\()");
for (String part : parts) {
String input = part.replaceAll("[()]", "");
ages[count] = Integer.parseInt(input.split(", ")[0]);
names[count] = input.split(", ")[1];
count++;
}
}
}