close()永久关闭输入流

时间:2016-10-24 19:21:46

标签: java io

我正在尝试制作一个简单的方法gulp-open,从readIn()读取内容。 (不能使用Console,因为System.in在Eclipse中运行时返回null)。我的想法是根据需要调用System.console(),就像这样

readIn

以下是 classs Foo{ public static void(String[] arg){ String first = readIn("First, please"); System.out.println(first); String second = readIn("Second, please"); System.out.println(second); } } 的最简单形式:

readIn()

如果我省略 static String readIn(String prompt){ System.out.println(prompt + ": "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); br.close(); // PROBLEM STATEMENT return line; } 语句就可以了 - 我可以反复拨打br.close()。但是,如果我按照我应该关闭readIn,那么只有第一个呼叫才有效。第二次电话会议br。正如预期的那样,IOException: Stream closed中的try-with-resources会发生同样的事情:

readIn

static String readIn(String prompt){ System.out.println(prompt + ": "); String line; try( BufferedReader br = new BufferedReader( new InputStreamReader(System.in)) ) { line = br.readLine(); } return line; } 代替Scanner(System.in)也会发生同样的事情。从文件中读取时不会发生这种情况。

如果在BufferedReader的每次通话中都设置了新的BufferedReaderScanner,则会关闭哪个流?这是关于readIn关闭“底层可读/可关闭”(System.in)的东西吗?可以重新开放吗?试着理解,谢谢。

1 个答案:

答案 0 :(得分:0)

public class MyIME extends InputMethodService implements KeyboardView.OnKeyboardActionListener { : : private Timer timerLongPress = null; : : @Override public void onCreate() { super.onCreate(); : : timerLongPress = new Timer(); : : } @Override public void onRelease(final int primaryCode) { : : timerLongPress.cancel(); : : } @Override public void onPress(final int primaryCode) { : : timerLongPress.cancel(); : : timerLongPress = new Timer(); timerLongPress.schedule(new TimerTask() { @Override public void run() { try { Handler uiHandler = new Handler(Looper.getMainLooper()); Runnable runnable = new Runnable() { @Override public void run() { try { MyIME.this.onKeyLongPress(primaryCode); } catch (Exception e) { Log.e(MyIME.class.getSimpleName(), "uiHandler.run: " + e.getMessage(), e); } } }; uiHandler.post(runnable); } catch (Exception e) { Log.e(MyIME.class.getSimpleName(), "Timer.run: " + e.getMessage(), e); } } }, ViewConfiguration.getLongPressTimeout()); : : } public void onKeyLongPress(int keyCode) { // Process long-click here } 也会关闭系统输入流br.close();,因此除非重新启动JVM,否则无法使用它。 您可以对System.in

中的所有必需输入使用相同的BufferedReader实例

也不要害羞混合电话:

System.in

它们与不同的流有关,所以不应该有任何问题。