NIO 中文乱码自我解决的简单DEMO
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import org.apache.commons.lang.time.DurationFormatUtils;
public class NIOTest {
public static final int SIZE = 102400;
public static final String PATH = "D:\\test\\test.txt";
public static void main(String args[]) {
//方法一
/*
try {//写数据
FileChannel fileOutChannel = new FileOutputStream(PATH,true).getChannel();
fileOutChannel.write(ByteBuffer.wrap("这是用FileOutpuStream调用NIO的Channel写出的内容".getBytes()));
System.out.println("写出成功!");
fileOutChannel.close();
//读数据
FileChannel fileInChannel = new FileInputStream(PATH).getChannel();
ByteBuffer byteBuffer = ByteBuffer.allocate(SIZE);
fileInChannel.read(byteBuffer);
byteBuffer.flip();
Charset charset = Charset.forName("UTF-8");
while (byteBuffer.hasRemaining()) {
CharsetDecoder charsetDecoder = charset.newDecoder();
CharBuffer charBuffer = charsetDecoder.decode(byteBuffer);
System.out.print(charBuffer);
}
System.out.println();
System.out.println("读入完成!");
fileInChannel.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
//方法二
try {
RandomAccessFile randomAccessFile = new RandomAccessFile(PATH, "rw");
//写数据
randomAccessFile.writeUTF("这是用RandomAccessFile调用NIO的Channel写出的内容");
System.out.println("写出成功!");
//读数据
randomAccessFile.seek(0);
System.out.println(randomAccessFile.readUTF());
System.out.println("读入成功!");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO: handle exception
}
}
}
查看方法一运行效果: