我是否可以使用扫描仪从用户读取输入特定输入,然后创建一个新实例以从文件中读取?
Scanner sc = new Scanner(System.in);
System.out.print("Enter the file name: ");
String fileName = sc.next();
sc = new Scanner(fileName);
displayAll(sc); //a static void method that takes the Scanner object as a parameter and is supposed to read and display the input stored in the .txt file
答案 0 :(得分:2)
嗯,您需要使用File
:
Scanner sc = new Scanner(System.in);
System.out.print("Enter the file name: ");
String fileName = sc.next();
sc = new Scanner(new File(fileName));
try-catch
不存在的文件会更安全。您可以使用if-else
。嗯......逻辑取决于你。也许是这样的:
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("Enter file name");
String filename = sc.next();
if (!filename.startsWith("sth")) { //this will reask if the file name doesn't start with "sth"
continue;
try {
Scanner s = sc; //just in case you never gonna use System.in
sc = new Scanner(new File(filename));
s.close(); //just in case you're sure you never gonna use System.in
break;
} catch (Exception e) {
System.out.println("Wrong filename - try again");
}
}
显然,您可以将if
条件更改为您喜欢的任何内容。我只是想给你一个更广阔的视角。如果您愿意,可以切换到equals
。
答案 1 :(得分:-1)
您没有使用问题标题中所述的Scanner
。您正在创建Scanner
的两个不同且独立的实例。
sc
是扫描程序参考。首先,它引用第一个Scanner
对象。然后更改对象引用以指向第二个Scanner
对象。您没有重用Scanner
个对象,而是重用对象引用。这完全没问题。
创建Scanner
对象时,无法更改扫描程序使用的源。从不同的源获取数据需要创建新实例。
在您的代码示例中,您使用两个不同的扫描程序System.in
和文件的方法很好。但是,您的示例中的问题是您对文件Scanner使用了错误的构造函数。要使用该文件作为源创建扫描器,您需要创建一个File
或Path
对象,并使用此对象作为构造函数参数而不是文件名String:
new Scanner(new File(filename));
或者:
new Scanner(Paths.get(filename));