欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java NIO 按行读写大文件,javanio行读写,TestNio.java

来源: javaer 分享于  点击 440 次 点评:248

Java NIO 按行读写大文件,javanio行读写,TestNio.java


TestNio.java

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class TestNio {     public static void main(String args[]) throws Exception{     //String infile = "D:\\workspace\\test\\usagetracking.log";     //FileInputStream fin= new FileInputStream(infile);     //FileChannel fcin = fin.getChannel();     int bufSize = 100;     File fin = new File("D:\\workspace\\test\\usagetracking.log");     File fout = new File("D:\\workspace\\test\\usagetracking2.log");     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("OK!!!");     }     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(buffer)) != -1){         while(fcin.read(rBuffer) != -1){               int rSize = rBuffer.position();               rBuffer.rewind();               rBuffer.get(bs);               rBuffer.clear();               String tempString = new String(bs, 0, rSize);               //System.out.print(tempString);               //System.out.print("<200>");               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);                //System.out.print(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();         }     } } 
相关栏目:

用户点评