在 Apache Commons 中,我可以这样写:

LineIterator it = IOUtils.lineIterator(System.in, "utf-8");
while (it.hasNext()) {
    String line = it.nextLine();
    // do something with line
}

Guava 中是否有类似的东西?

最佳答案

嗯,首先......这不是你特别需要一个库的东西,因为它可以用直接的 JDK 作为

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in,
  Charsets.UTF_8));
// okay, I guess Charsets.UTF_8 is Guava, but that lets us not worry about
// catching UnsupportedEncodingException
while (reader.ready()) {
  String line = reader.readLine();
}

但如果你想让它成为更多的 Collection 品 - y Guava 提供 List<String> CharStreams.readLines(Readable)

我认为我们不提供Iterator,因为实际上没有任何好方法可以处理IOException的存在。 Apache 的 LineIterator 似乎默默地捕获 IOException 并关闭迭代器,但是……这似乎是一种令人困惑、冒险且并不总是正确的方法。基本上,我认为这里的“ Guava 方法”要么一次将整个输入读入 List<String> ,要么自己执行 BufferedReader 风格的循环并决定如何处理 IOException 的潜在存在。

一般来说,Guava 的大多数 I/O 实用程序都专注于可以关闭和重新打开的流,如文件和资源,但并不像 System.in

关于java - 有没有一种简单的方法来循环 Guava 中的标准输入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10811194/

10-13 08:58