您的位置:首页 > 其它

【NIO】通过FileChannel读取包含中文内容的文件

2017-04-15 16:53 411 查看
直接上代码:
package com.xx.nio;

import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;

public class ChannelTest {
public static void main(String[] args) throws Exception {
String path = ChannelTest.class.getResource("/").getPath();
FileInputStream fis = new FileInputStream(new File(path + "nio-test.txt"));
FileChannel channel = fis.getChannel();
/*
* Java.nio.charset.Charset处理了字符转换问题。
* 它通过构造CharsetEncoder和CharsetDecoder将字符序列转换成字节和逆转换。
*/
Charset charset = Charset.forName("UTF-8");
CharsetDecoder decoder = charset.newDecoder();
ByteBuffer buffer = ByteBuffer.allocate(128);
CharBuffer charBuffer = CharBuffer.allocate(128);
int i = channel.read(buffer);
while(i != -1){
buffer.flip(); // 切换到读模式
decoder.decode(buffer, charBuffer, false);
charBuffer.flip(); // 切换到读模式
while(charBuffer.hasRemaining()){
char c = charBuffer.get();
System.out.print(c);
}
charBuffer.clear();
buffer.clear();
i = channel.read(buffer);
}

channel.close();
fis.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: