繁体   English   中英

关于java.util.Scanner

[英]About java.util.Scanner

我为作业写了一些“堆排序”代码。

  1. 我收到了输入文件名。

     Scanner in = new Scanner(System.in); System.out.print("insert 'input file name' : "); String fileName = in.nextLine(); in.close(); 
  2. 然后我读了那个文件。

     in = new Scanner(new File(fileName)); ArrayList<Integer> source = new ArrayList<Integer>(); MyIntHeap heap = new MyIntHeap(); for(int idx=0; in.hasNextInt(); ++idx){ source.add(in.nextInt()); heap.add(source.get(idx)); } in.close(); 
  3. 最后,我尝试接收输出文件名...

     in = new Scanner(System.in); System.out.print("insert 'output file name' : "); fileName = in.nextLine(); in.close(); 

此时,程序向我抛出了一个错误。

insert 'input file name' : abc.txt
insert 'output file name' : Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at Solution.main(Solution.java:13)

现在我解决问题

    Scanner in = new Scanner(System.in);
    System.out.print("insert 'input file name' : ");
    String inputFile = in.nextLine();
    System.out.print("insert 'output file name' : ");
    String outputFile = in.nextLine();
    in.close();

但是我想知道为什么会发生这个问题。

Scanner in = new Scanner(System.in);
...
in.close();

这里的问题是您要关闭正在读取System.inScanner 这也会关闭System.in

解决方案是您不应该关闭Scanner

您应该始终关闭创建的资源。 System.in不是您创建的资源,因此您无需关闭它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM