我有一个名为isValidFile的方法,它接收用户输入字符串并确定它是否是有效文件。方法输出属于File类型。我可以在命令行中输入2个文件名并正确处理它们。我也可以接受1个有效,1个无效。如果输入的文件名不正确,则isValidFile将检查有效性并向用户提供有效的文件名。但是,它不适用于2个无效输入。我称之为......
String[] inLines = commandLine(args);
File reservedWords = isValidFile(inLines[0]);
File toParse = isValidFile(inLines[1]);
这是我的isValidFile方法......
public static File isValidFile(String userFile){
System.out.println("START OF isValidFile");
File inFile = new File(userFile);
Scanner in = null;
while(!inFile.exists() || inFile.isDirectory()){
System.out.println("Please enter a valid file name or Q to quit.");
in = new Scanner(System.in);
String validFile = in.nextLine();
System.out.println("IS VALID FILE? " + validFile); // TEST LINE
if(validFile.equalsIgnoreCase("q")){
System.out.println("\nProgram terminated by user.");
in.close();
return null;
} else inFile = new File(validFile);
if (inFile.exists()) in.close();
}
System.out.println("END OF isValidFile\n");
return inFile;
}
您可以看到我放入测试行的位置,以显示开头,结尾和打印出来的文件名(如果已接受)。这是我的输出。您可以看到,一旦我输入第一个参数的有效文件,它就会询问第二个参数的文件名,但不允许我输入任何信息。它只是抛出一个NoSuchElementException。为什么第一次调用方法而不是第二次调用呢?
START OF isValidFile
请输入有效的文件名或Q以退出。
in.txt
是有效的文件吗? in.txt
结束isValidFile
START OF isValidFile
请输入有效的文件名或Q以退出。
线程中的异常" main" java.util.NoSuchElementException:没有行 结果
at java.util.Scanner.nextLine(Unknown Source)
在Project6.isValidFile(Project6.java:53)
在Project6.main(Project6.java:9)
---第53行是行:String validFile = in.nextLine();
---第9行是行:File toParse = isValidFile(inLinse [1]);
答案 0 :(得分:0)
您不想关闭扫描仪,b / c它将关闭System.in。 System.in(即标准输入)由整个进程共享,因此对isValidFile的每个方法调用都是从同一标准输入读取的。如果它在第一次调用isValidFile结束时关闭,则在下次调用时它将失败。因此,它适用于第一个输入,但不适用于第二个输入。
public File isValidFile(String userFile){
System.out.println("START OF isValidFile");
File inFile = new File(userFile);
Scanner sc = new Scanner(System.in);
while(!inFile.exists() || inFile.isDirectory()){
System.out.println("Please enter a valid file name or Q to quit.");
String validFile = sc.nextLine();
System.out.println("IS VALID FILE? " + validFile); // TEST LINE
if(validFile.equalsIgnoreCase("q")){
System.out.println("\nProgram terminated by user.");
return null;
} else inFile = new File(validFile);
}
System.out.println("END OF isValidFile\n");
return inFile;
}