Java扫描程序错误:Java.util.NoSuchElementException:未找到任何行--Java.base/Java.util.Scanner.nextLine(Scanner.Java:1651))

Java扫描程序错误:Java.util.NoSuchElementException:未找到任何行--Java.base/Java.util.Scanner.nextLine(Scanner.Java:1651)),java,java.util.scanner,nosuchelementexception,Java,Java.util.scanner,Nosuchelementexception,我是java和programmin的初学者,所以这是一个计算单词或显示文本文件内容的文件读取器程序的完整代码,我想为使用if语句指示的命令获取用户输入,但是String printFileCommand=scan.nextLine()不工作: package com; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner;

我是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.io.File;
导入java.io.FileNotFoundException;
导入java.util.Scanner;
公共类文件读取器{
公共静态void main(字符串[]args)引发FileNotFoundException{
Scanner scanTwo=新扫描仪(System.in);
System.out.println(“请输入您的文件路径”);
字符串filePath=scanTwo.nextLine();
scanTwo.close();
文件输入=新文件(文件路径);
Scanner fileScanner=新扫描仪(fileInput);
System.out.println(fileScanner.nextLine());
fileScanner.close();
System.out.println(“命令:PRINT.FILE-->打印所有文件计数。单词-->统计所有单词”);
System.out.println(“键入命令:”);
扫描仪扫描=新扫描仪(System.in);
String printFileCommand=scan.nextLine();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\adoptionOpenJDK\jdk-15.0.1.9-hotspot\bin\java.exe''--启用预览'-XX:+ShowCodeDetailsInExceptionMessages'-Dfile.encoding=UTF-8'-cp''c:\Users\DR\AppData\Roaming\Code\User\User\workspaceStorage\458DC35931A3067A355426E5CEEE32\redhat.java\jdt_ws\FIRST REAL PROGRAMMING\u e263b9bc\bin''com.FileReader'
请输入您的文件路径
E://textwo.txt
这是我的文本文件。
命令:PRINT.FILE-->打印所有文件计数。单词-->统计所有单词
类型命令:
线程“main”java.util.NoSuchElementException中出现异常:未找到任何行
位于java.base/java.util.Scanner.nextLine(Scanner.java:1651)
位于com.FileReader.main(FileReader.java:21)
PS C:\Users\DR\Desktop\FIRST REAL PROGRAMMING>
那么为什么'String printFileCommand=scan.nextLine();'不起作用呢?我试了很多次,但都不起作用。。。

请检查此问题:

如果删除以下代码,代码将正常工作:

  scanTwo.close();
或更好:

  Scanner scan = new Scanner(System.in);
并使用scanTwo进行读取(但不必使用scanTwo.close()关闭扫描仪)


但我建议您阅读这些答案,以了解它是如何工作的。

它不起作用,因为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();

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

扫描仪=新的扫描仪(System.in)

字符串filePath=scanner.nextLine()


对于其他一些扫描仪,您可以保留,因为您在扫描仪中专门调用了fileInputs,但当要求用户提供数据时,我建议只使用一个扫描仪源,但要使用类似于我共享的最后一行代码的模板来更新您的代码!如果我误解了某些内容,欢迎您发布我知道。谢谢!

这能回答你的问题吗?