使用 Java 从文件读取 UTF8 数据

java 8object oriented programmingprogramming更新于 2025/11/16 8:44:17

通常,数据以位(1 或 0)的形式存储在计算机中。有多种编码方案可用于指定每个字符所代表的字节集。

Unicode (UTF) − 代表 Unicode 翻译格式。它由 Unicode 联盟开发。如果您要创建使用来自多个字符集的字符的文档,则可以使用单一 Unicode 字符编码来实现。它提供 3 种类型的编码。

  • UTF-8 − 它以 8 位(字节)为单位,UTF8 中的字符长度可以是 1 到 4 个字节,因此 UTF8 的宽度可变。

  • UTF-16 −它以 16 位短整型 (short) 为单位,长度可以是 1 或 2 个短整型,因此 UTF16 的宽度可变。

  • UTF-32 − 它以 32 位长整型 (long) 为单位。它是一种固定宽度格式,长度始终为 1 个"long"。

将 UTF 数据写入文件

java.io.DataOutputStream 的 readUTF() 方法将采用改进型 UTF-8 编码的数据读取到字符串中并返回。因此,要将 UTF-8 数据读取到文件 −

  • 通过传递表示所需文件路径的字符串值作为参数来实例化 FileInputStream  类。

  • 绕过上面创建的 FileInputStream 对象作为参数来实例化 DataInputStream 类。

  • 使用 readUTF() 方法从 InputStream 对象读取 UTF 数据。

示例

import java.io.DataInputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.IOException;
public class UTF8Example {
   public static void main(String args[]) {
      StringBuffer buffer = new StringBuffer();
      try {
         //实例化 FileInputStream 类
         FileInputStream fileIn = new FileInputStream("D:\test.txt");
         //实例化 DataInputStream 类
         DataInputStream inputStream = new DataInputStream(fileIn);
         //从 DataInputStream 读取 UTF 数据
         while(inputStream.available()>0) {
            buffer.append(inputStream.readUTF());
         }
      }
      catch(EOFException ex) {
         System.out.println(ex.toString());
      }
      catch(IOException ex) {
         System.out.println(ex.toString());
      }
      System.out.println("Contents of the file: "+buffer.toString());
   }
}

输出

Contents of the file: టుటోరియల్స్ పాయింట్ కి స్వాగతిం

java.nio.file.Files 类新增了 bufferedReader() 方法,该方法接受一个表示文件路径的 Path 类对象和一个表示要读取的字符序列类型的 Charset 类对象作为参数,并返回一个可以读取指定格式数据的 BufferedReader 对象。

Charset 的值可以是 StandardCharsets.UTF_8、StandardCharsets.UTF_16LE、StandardCharsets.UTF_16BE、StandardCharsets.UTF_16、StandardCharsets.US_ASCII 或 StandardCharsets.ISO_8859_1

因此,要将 UTF-8 数据读取到文件 −

  • 使用 Path 类的 get() 方法创建/获取表示所需路径的对象。 java.nio.file.Paths 类。

  • 创建/获取一个 BufferedReader 对象,该对象可以读取 UtF-8 数据,绕过上面创建的 Path 对象和 StandardCharsets.UTF_8 作为参数。

  • 使用 BufferedReader 对象的 readLine() 方法读取文件内容。

示例

import java.io.BufferedReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class UTF8Example {
   public static void main(String args[]) throws Exception{
      //获取 Path 对象
      String filePath = "D:\samplefile.txt";
      Path path = Paths.get(filePath);
      //创建 BufferedReader 对象
      BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
      //从文件中读取 UTF-8 数据
      StringBuffer buffer = new StringBuffer();
      int ch = 0;
      while((ch = reader.read())!=-1) {
         buffer.append((char)ch+reader.readLine());
      }
      System.out.println("Contents of the file: "+buffer.toString());
   }
}

输出

Contents of the file: టుటోరియల్స్ పాయింట్ కి స్వాగతిం

相关文章