【问题标题】:Read a text file in JAVA在 JAVA 中读取文本文件
【发布时间】:2016-02-29 04:57:06
【问题描述】:

可以使用 FileReader 和 BufferedReader 类直接读取文本文件。 在一些技术说明中,提到将文本文件作为输入流,然后转换为Inputstreamreader,然后再转换为BufferedReader。

我们需要使用 InputStream 方法的任何原因

【问题讨论】:

  • 这是 2015 年。不要再使用File。使用Files.newBufferedReader()
  • Files.linesFiles.readAllLines
  • 谢谢,它工作正常。这是否意味着对于任何文本数据,我们都可以使用阅读器类(使用 Bufferedreader 中提到的编码)。并且仅对图像和视频文件使用 Inputstream ...?

标签: java


【解决方案1】:

FileReader 是读取字符文件的便利类。此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。要自己指定这些值,请在 FileInputStream 上构造一个 InputStreamReader。

【讨论】:

  • 感谢您的回复。在哪个scnerios中我们需要使用Inputstream来获取文本文件,然后传给InputstreamReader
  • @PanayappanSwaminathan 嗯...这里的关键字是encoding。如果需要指定编码,则根本不能使用FileReader
  • 感谢您的回复。在什么情况下我们需要对文本文件使用编码。
【解决方案2】:

补充this answer...

如果你不需要,真的不需要使用BufferedReader,除了它有非常方便的.readLine() 方法。这是第一点。

其次,更重要的是:

  • 使用 JSR 203。不要再使用 File
  • 使用 try-with-resources。

它们都出现在 Java 7 中。因此,读取文本文件的新方法如下:

final Path path = Paths.get("path/to/the/file");

try (
    final BufferedReader reader = Files.newBufferedReader(path,
        StandardCharsets.UTF_8);
) {
    // use reader here
}

在 Java 8 中,您还有一个版本的 Files.newBufferedReader(),它将字符集作为参数;这将默认以 UTF-8 读取。同样在 Java 8 中,您有 Files.lines():

try (
    final Stream<String> stream = Files.lines(thePath);
) {
    // use the stream here
}

是的,对这样的流使用 try-with-resources!

【讨论】:

  • 感谢您的回复。在哪个 scnerios 中我们需要使用 InputStream 来获取文件并使用 Inputstreamreader 将其桥接到字符集
  • 你不需要;不使用新的 API。好吧,如果您希望默认编码错误操作不同于 CodingErrorAction.REPLACE,您可能需要它。更多详情,您可能想查看here
  • 这是否意味着我们可以使用阅读器类的任何文本数据(使用 Bufferedreader 中提到的编码)。并且仅对图像和视频文件使用 Inputstream ...?
  • 如果你知道你的输入是文本,那么是的,去Reader。任何不是文本的东西都应该使用InputStream。这不仅适用于文件,而且适用于您必须处理的任何字节流(套接字连接等)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
相关资源
最近更新 更多