You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java File技术疑问:能否使用readUTF读取文本文件中的字符串?

Can you use readUTF() to read strings from a text file in Java?

哥们儿,这个问题得掰扯清楚:技术上你能调用这个方法,但绝对不推荐这么做,几乎一定会出问题。

原因很简单,readUTF()是DataInputStream类里的方法,它从设计之初就不是用来读取普通文本文件的——它的专属配对方法是DataOutputStream.writeUTF()。当你用writeUTF()写字符串时,JVM会先写入两个字节的长度标识(用来表示后续UTF-8编码的字节数),再写入字符串的UTF-8字节内容。

但普通文本文件(比如你用记事本创建的.txt)根本没有这个前置的长度字节。如果你直接用readUTF()去读,它会把文本开头的两个字节当成长度值,然后尝试读取对应长度的字节:

  • 如果文本总长度不够,直接抛出EOFException;
  • 如果侥幸读够了字节,读出来的内容也是完全乱码的,因为它把原本的文本内容当成了带长度标识的二进制数据来解析。

举个直观的例子:

  • 用writeUTF("Hello")写入的内容,实际存储的字节序列是:0x00 0x05 48 65 6C 6C 6F(前两个字节是长度5,后面是Hello的UTF-8字节);
  • 普通文本文件里的"Hello",存储的就是48 65 6C 6C 6F,没有前面的长度字节。

那读取普通文本文件该用啥?推荐用专门处理字符流的工具:

  • BufferedReader + FileReader(适合逐行读取文本);
  • Files.readString()(Java 11+,直接读取整个文件为字符串,简洁高效);
  • 如果需要指定编码,用InputStreamReader配合指定字符集(比如StandardCharsets.UTF_8)。

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:46:43