Java文件编码转换(字符翻译)

首先通过标题,就知道程序中大概需要用到那些类:

 

1 File : 文件操作

2 RandomAccessFile :支持对随机访问文件的读取和写入的实用类

3 FileChannel 用于读取、写入、映射和操作文件的通道的实用类。

4 MappedByteBuffer 直接字节缓冲区,其内容是文件的内存映射区域,扩展了ByteBuffer类。

5 Charset、CharsetDecoder、CharsetEncoder、ByteBuffer 、CharBuffer等。

 

流程如下:

 

1 用创建指定文件的File类。

2 创建输入、输出文件的随机访问类。

3 获取输入、输出的文件通道。

4 将输入文件产生文件映射自己缓冲区,目的是为了直接读写字节流。

5 产生输入文件的decoder类和输出文件的encoder类。

6 对输入文件进行解码,编码到输出文件中。

 

例子:

 

<!-- end source code -->
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;

public class Main {
  static public void main(String args[]) throws Exception {
    File infile = new File("inFilename");
    File outfile = new File("outFilename");

    RandomAccessFile inraf = new RandomAccessFile(infile, "r");
    RandomAccessFile outraf = new RandomAccessFile(outfile, "rw");

    FileChannel finc = inraf.getChannel();
    FileChannel foutc = outraf.getChannel();
    //将输入文件的通道通过只读的权限 映射到内存中。
    MappedByteBuffer inmbb = finc.map(FileChannel.MapMode.READ_ONLY, 0(intinfile.length());
   
    Charset inCharset = Charset.forName("UTF8");
    Charset outCharset = Charset.forName("UTF16");

    CharsetDecoder inDecoder = inCharset.newDecoder();
    CharsetEncoder outEncoder = outCharset.newEncoder();

    CharBuffer cb = inDecoder.decode(inmbb);
    ByteBuffer outbb = outEncoder.encode(cb);

    foutc.write(outbb);

    inraf.close();
    outraf.close();
  }
}

你可能感兴趣的:(java)