java nio 按行读取_JAVA之NIO按行读写大文件,完美解决中文乱码问题

该博客介绍了一个使用JAVA NIO按行读取大文件的方法,特别是在处理百万级别的文件时,同时解决了中文乱码问题。通过定义缓冲区和处理换行符,实现了高效且准确的文件读取。示例代码中包含关键操作,如读取、转换和写入文件。
摘要由CSDN通过智能技术生成

packagecom.chillax.imp;

importjava.io.File;

importjava.io.IOException;

importjava.io.RandomAccessFile;

importjava.nio.ByteBuffer;

importjava.nio.channels.FileChannel;

importjava.util.ArrayList;

importjava.util.Date;

importjava.util.List;

/**

* NIO读取百万级别文件

* @author Chillax

*

*/

publicclassNIO {

publicstaticvoidmain(String args[])throwsException {

intbufSize =1000000;//一次读取的字节长度

File fin = newFile("D:\\test\\20160622_627975.txt");//读取的文件

File fout = newFile("D:\\test\\20160622_627975_1.txt");//写出的文件

Date startDate = newDate();

FileChannel fcin = newRandomAccessFile(fin,"r").getChannel();

ByteBuffer rBuffer = ByteBuffer.allocate(bufSize);

FileChannel fcout = newRandomAccessFile(fout,"rws").getChannel();

ByteBuffer wBuffer = ByteBuffer.allocateDirect(bufSize);

readFileByLine(bufSize, fcin, rBuffer, fcout, wBuffer);

Date endDate = newDate();

System.out.print(startDate+"|"+endDate);//测试执行时间

if(fcin.isOpen()){

fcin.close();

}

if(fcout.isOpen()){

fcout.close();

}

}

publicstaticvoidreadFileByLine(intbufSize, FileChannel fcin,

ByteBuffer rBuffer, FileChannel fcout, ByteBuffer wBuffer) {

String enter = "\n";

List dataList = newArrayList();//存储读取的每行数据

byte[] lineByte =newbyte[0];

String encode = "GBK";

//      String encode = "UTF-8";

try{

//temp:由于是按固定字节读取,在一次读取中,第一行和最后一行经常是不完整的行,因此定义此变量来存储上次的最后一行和这次的第一行的内容,

//并将之连接成完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值