关闭 BufferedReader 和 System.in

6
Reader rdr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(rdr);
String s;
s = br.readLine();
br.close();
Scanner sc = new Scanner(System.in);
s = sc.nextLine();
System.out.print(s);

我注意到,如果我关闭BufferedReader,我将无法再从键盘插入输入,因为System.in被关闭了。有没有办法我可以保持br.close()(我需要这样做才能删除文件),然后再从键盘添加更多输入?


2
删除哪个文件?BufferedReader 应该绑定到特定的输入流。一旦关闭,就不能再次使用它们。 - soulcheck
7
为了删除文件,你真的不需要关闭 br - Jon Skeet
2
如果您从文件中读取内容,并使用 BufferedReader 读取到某个点,然后关闭 BufferedReader 并从文件流中继续读取,那么您将会丢失一些字节。这些字节被缓冲读取器(为了缓冲)所消耗。您需要找到另一种方法。为什么需要从 Reader 子类转换为 Scanner?是因为某些 API 的限制吗?无论哪种情况,您都可以采用不同的方法,例如使用 RandomAccessFile 和/或自定义 Scanner 子类,它也可以执行 Reader 的功能。 - Mark Jeronimus
这是我用 BufferedReader 读取的文件。然后我需要删除它。如果我不关闭 BufferedReader,则无法删除该文件(file.delete() 返回 false)。 - Bogdan Tomi
2个回答

2

你说 'new CloseShieldInputStream(System.in)' - bmargulies
谢谢。我最终采用了另一种方式解决了这个问题,我没有删除那个文件,而是用正确的信息重写了它 :) - Bogdan Tomi

0

如果您只想通过System.in从键盘获取输入,请使用静态BufferedReader包装InputStreamReader(也包装System.in)。 像这样:

 Public BufferedReader is = new BufferedReader(new InputStreamReader(System.in));

在你的应用程序终止之前,需要加入is.close()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接