[英]About java.util.Scanner
我为作业写了一些“堆排序”代码。
我收到了输入文件名。
Scanner in = new Scanner(System.in); System.out.print("insert 'input file name' : "); String fileName = in.nextLine(); in.close();
然后我读了那个文件。
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();
最后,我尝试接收输出文件名...
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.in
的Scanner
。 这也会关闭System.in
。
解决方案是您不应该关闭Scanner
。
您应该始终关闭已创建的资源。 System.in
不是您创建的资源,因此您无需关闭它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.