使用Java读取文件中的UTF8数据


一般来说,数据以比特(1 或 0)的形式存储在计算机中。有多种编码方案可用于指定每个字符所表示的字节集。

Unicode (UTF) - 代表 Unicode 转换格式。它由 Unicode Consortium 开发。如果您想创建使用来自多个字符集的字符的文档,则可以使用单个 Unicode 字符编码来实现。它提供三种编码类型。

  • UTF-8 - 它以 8 位单元(字节)为单位,UTF8 中的一个字符可以是 1 到 4 个字节长,这使得 UTF8 成为可变宽度。

  • UTF-16 - 它以 16 位单元(短整数)为单位,它可以是 1 或 2 个短整数长,这使得 UTF16 成为可变宽度。

  • UTF-32 - 它以 32 位单元(长整数)为单位。它是一种固定宽度格式,长度始终为 1 个“长整数”。

将 UTF 数据写入文件

java.io.DataOutputStreamreadUTF() 方法将以修改后的 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 {
         //Instantiating the FileInputStream class
         FileInputStream fileIn = new FileInputStream("D:\test.txt");
         //Instantiating the DataInputStream class
         DataInputStream inputStream = new DataInputStream(fileIn);
         //Reading UTF data from the DataInputStream
         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 数据读取到文件中:

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

  • 创建/获取一个可以读取 UTF-8 数据的 BufferedReader 对象,通过将上面创建的 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{
      //Getting the Path object
      String filePath = "D:\samplefile.txt";
      Path path = Paths.get(filePath);
      //Creating a BufferedReader object
      BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
      //Reading the UTF-8 data from the file
      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: టుటోరియల్స్ పాయింట్ కి స్వాగతిం

更新于:2019年9月10日

3K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告