在java中使用相同的Scanner

时间:2016-10-13 09:19:30

标签: java java.util.scanner filereader

我是否可以使用扫描仪从用户读取输入特定输入,然后创建一个新实例以从文件中读取?

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

2 个答案:

答案 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使用了错误的构造函数。要使用该文件作为源创建扫描器,您需要创建一个FilePath对象,并使用此对象作为构造函数参数而不是文件名String:

new Scanner(new File(filename));

或者:

new Scanner(Paths.get(filename));