我做的是我做了一个错误检查,每当用户输入无效的文件名时就会循环:
public static Scanner readFile(String filename){
Scanner stdin = new Scanner(System.in);
File input = new File(filename);
Scanner sc = null;
do {
try {
sc = new Scanner(input);
}
catch(FileNotFoundException e) {
System.out.println("Filename not valid. Please try again:");
filename = stdin.nextLine();
}
} while (!new File(filename).exists());
return sc;
}
我也有足够的方法来读取该文件并将数据放入数组中:
public static CO2Data[] readData(String filename){
File input = new File(filename);
Scanner sc = null;
try{
sc = new Scanner(input);
}
catch(FileNotFoundException e){
System.out.println("Filename not valid");
System.exit(-1);
}
String info = sc.nextLine();
int total = sc.nextInt();
CO2Data[] arr = new CO2Data[total];
for(int i=0; i<10;i++){
arr[i] = new CO2Data();
}
for(int i=0; i<10;i++){
arr[i].setCountry(sc.next());
arr[i].setTotalCO2(sc.nextDouble());
arr[i].setRoadCO2(sc.nextDouble());
arr[i].setCO2PerPerson(sc.nextDouble());
arr[i].setCarsPerPerson(sc.nextInt());
}
return arr;
}
问题是,如果我先键入一个无效的文件名然后输入一个有效的名称,程序会说该文件无效,但是如果我先输入一个有效的文件名,那么程序运行正常。那么如何输入有效的文件名首先工作正常,但键入一个无效的名称,然后一个有效的名称使程序给我一个错误信息。
答案 0 :(得分:0)
好吧,让我们来看看完整的情景:
如果键入无效的文件名,代码将移动到catch块,等待您输入带有该行的新文件名
filename = stdin.nextLine();
您输入有效的文件名,变量filename将重置为新文件名(目前为止好)
然后我们转到While
块,它会检查文件是否存在(它确实存在!)好,所以我们转到return语句(它存在问题)
在return语句中,您将返回持有上一个无效文件名的扫描程序。在返回之前,您需要使用新文件重新扫描扫描仪。
我可能会编辑while循环来读取
public static Scanner readFile(String filename){
Scanner stdin = new Scanner(System.in);
File input = new File(filename);
Scanner sc = null;
do {
try {
input = new File(filename);
sc = new Scanner(input);
}catch(FileNotFoundException e) {
System.out.println("Filename not valid. Please try again:");
filename = stdin.nextLine();
}
} while (!input.exists());
return sc;
}
这样我们会在收到有效输入后创建一个新的File
类,然后返回一个新的Scanner
来保存新的input
答案 1 :(得分:0)
您无法从文件名创建新输入 - 因此您始终使用扫描程序中的第一个文件名。这应该有效:
更新代码
public static Scanner readFile(String filename){
Scanner stdin = new Scanner(System.in);
Scanner sc = null;
File input;
do {
input = new File(filename);
try {
sc = new Scanner(input);
}
catch(FileNotFoundException e) {
System.out.println("Filename not valid. Please try again:");
filename = stdin.nextLine();
}
} while (!input.exists());
return sc;
}