首页 > 编程 > Java > 正文

java实现超大文件的读写功能

2019-11-26 09:02:44
字体:
来源:转载
供稿:网友

对于几百M或上G的大文件可使用java nio进行读写 , 根据个人的需求 可能需要将一个超大文件读写形成很多较小的文件进行分析,这也不是什么难事,在读完一个缓冲区后 更换写入的对象即可,本文就不做详细介绍了,有需要的可以联系本人。

直接上程序吧

package cn.gzu.readfile; import java.io.File;  import java.io.IOException;  import java.io.RandomAccessFile;  import java.nio.ByteBuffer;  import java.nio.channels.FileChannel;   public class ReadWriteNio {  public static void main(String args[]) throws Exception{  int bufSize = 100;  File fin = new File("E://jiahui//2014-09-01.dat");  File fout = new File("E://jiahui//res.txt");   System.out.print("开始读取并重写文件,请等待...");  FileChannel fcin = new RandomAccessFile(fin, "r").getChannel();  ByteBuffer rBuffer = ByteBuffer.allocate(bufSize);   FileChannel fcout = new RandomAccessFile(fout, "rws").getChannel();  ByteBuffer wBuffer = ByteBuffer.allocateDirect(bufSize);   readFileByLine(bufSize, fcin, rBuffer, fcout, wBuffer);   System.out.print("读写完成!"); }   /*读文件同时写文件*/public static void readFileByLine(int bufSize, FileChannel fcin, ByteBuffer rBuffer,  FileChannel fcout, ByteBuffer wBuffer){  String enterStr = "/n";  try{  byte[] bs = new byte[bufSize];   int size = 0;  StringBuffer strBuf = new StringBuffer("");  while((size = fcin.read(rBuffer)) != -1){ // while(fcin.read(rBuffer) != -1){  if(size > 1*1024){ break; }  int rSize = rBuffer.position();  rBuffer.rewind();  rBuffer.get(bs);  rBuffer.clear();  String tempString = new String(bs, 0, rSize,"UTF-8");  // System.out.println(size+": "+tempString);   int fromIndex = 0;  int endIndex = 0;  while((endIndex = tempString.indexOf(enterStr, fromIndex)) != -1){   String line = tempString.substring(fromIndex, endIndex);   line = new String(strBuf.toString() + line + "/n");   System.out.println(size+": "+line);   //System.out.print("</over/>");   //write to anthone file   writeFileByLine(fcout, wBuffer, line);    strBuf.delete(0, strBuf.length());   fromIndex = endIndex + 1;  }  if(rSize > tempString.length()){   strBuf.append(tempString.substring(fromIndex, tempString.length()));  }else{   strBuf.append(tempString.substring(fromIndex, rSize));  }  }  } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace();  } }   /*写文件*/public static void writeFileByLine(FileChannel fcout, ByteBuffer wBuffer, String line){  try {  //write on file head  //fcout.write(wBuffer.wrap(line.getBytes()));  //wirte append file on foot  fcout.write(wBuffer.wrap(line.getBytes()), fcout.size());   } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace();  } }   } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表