【问题标题】:Java Scanner Error : java.util.NoSuchElementException: No line found -- java.base/java.util.Scanner.nextLine(Scanner.java:1651))Java 扫描仪错误:java.util.NoSuchElementException:找不到行 -- java.base/java.util.Scanner.nextLine(Scanner.java:1651))
【发布时间】:2021-02-01 22:15:39
【问题描述】:

我是一个 java 和 programmin 的初学者,所以这是一个计算单词或显示文本文件内容的文件阅读器程序的完整代码,我想为我使用 if 语句指示的命令获取用户输入,但是由于以下错误,String printFileCommand = scan.nextLine(); 无法正常工作:


    package com;
    
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
    
    public class FileReader {
      public static void main(String[] args) throws FileNotFoundException {
        Scanner scanTwo = new Scanner(System.in);
        System.out.println("Please Enter Your File Path");
        String filePath = scanTwo.nextLine(); 
        scanTwo.close(); 
        File fileInput = new File(filePath);
        Scanner fileScanner = new Scanner(fileInput);
        System.out.println(fileScanner.nextLine());
        fileScanner.close();
        System.out.println("Commands: PRINT.FILE --> Prints all file    COUNT.WORDS --> Counts all words");
        System.out.println("Type Command:");
        
        Scanner scan = new Scanner(System.in);
        String printFileCommand = scan.nextLine();   <----ERROR HERE
        scan.close();
         
         
         if (printFileCommand.contains("PRINT.FILE")) {
           while (fileScanner.hasNextLine()) {
             System.out.println(fileScanner.nextLine());
            }
          } else if (printFileCommand.contains("COUNT.WORDS")) {
            int wordCount = 0;
            while (fileScanner.hasNext()) {
              String fileWords = fileScanner.next();
              wordCount++;
              // System.out.println(wordCount); 
            }
            System.out.println(wordCount);
          } 
          else {
            System.out.println("COMMAND INVALID!");
          }
        } 
      }
    ```

**Terminal Output:**

PS C:\Users\DR\Desktop\FIRST REAL PROGRAMMING>  c:; cd 'c:\Users\DR\Desktop\FIRST REAL PROGRAMMING'; & 'c:\Users\DR\.vscode\extensions\vscjava.vscode-java-debug-0.30.0\scripts\launcher.bat' 'C:\Program Files\AdoptOpenJDK\jdk-15.0.1.9-hotspot\bin\java.exe' '--enable-preview' '-XX:+ShowCodeDetailsInExceptionMessages' '-Dfile.encoding=UTF-8' '-cp' 'C:\Users\DR\AppData\Roaming\Code\User\workspaceStorage\458dc35931a3067a355426e5ceeeee32\redhat.java\jdt_ws\FIRST REAL PROGRAMMING_e263b9bc\bin' 'com.FileReader'
Please Enter Your File Path
E://texttwo.txt
This is my text file.
Commands: PRINT.FILE --> Prints all file    COUNT.WORDS --> Counts all words
Type Command:
Exception in thread "main" java.util.NoSuchElementException: No line found
        at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
        at com.FileReader.main(FileReader.java:21)
PS C:\Users\DR\Desktop\FIRST REAL PROGRAMMING>

So why is `String printFileCommand = scan.nextLine();` not working? I tried alot, but its not working...

【问题讨论】:

标签: java java.util.scanner nosuchelementexception


【解决方案1】:

它不起作用,因为您的 System.in 流已关闭。 你可以检查它,例如System.out.println(System.in.available());,你会看到:

Exception in thread "main" java.io.IOException: Stream closed
at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:159)
at java.io.BufferedInputStream.available(BufferedInputStream.java:410)

您已将其关闭:scanTwo.close();

【讨论】:

    【解决方案2】:

    我自己仍在尝试了解 Java,但我认为您并不完全需要创建和使用多个 Scanner 来收集数据。由于您正在为文件创建搜索字符串,因此从技术上讲,您可以执行以下操作:

    扫描仪扫描仪 = new Scanner(System.in);

    字符串文件路径 =scanner.nextLine();

    您可以保留其他一些扫描仪,因为您专门在扫描仪中调用 fileInputs,但是在向用户询问数据时,我建议只使用一个扫描仪源,但使用类似于我最后一行代码的内容共享为更新代码的模板!如果我误解了什么,非常欢迎您告诉我。谢谢!

    【讨论】:

      【解决方案3】:

      请检查这个问题: NoSuchElementException - class Scanner

      如果您删除代码,您的代码将起作用:

        scanTwo.close();
      

      或者去除更好:

        Scanner scan = new Scanner(System.in);
      

      并使用 scanTwo 进行读取(但您不必使用 scanTwo.close() 关闭扫描仪)。

      但我建议您阅读这些答案以了解其工作原理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 2018-09-07
        相关资源
        最近更新 更多