1 import java.io.File; 2 import java.io.FileNotFoundException; 3 import java.io.IOException; 4 import java.io.RandomAccessFile; 5 6 public class FileSplitDemo { 7 public static void main(String[] args) throws IOException { 8 //分好块以后,调用方法读取每一块 9 File f=new File("src/com/hh/ThreadDemoe.java"); 10 long length=f.length();//文件大小 11 int blockSize=60;//块大小 12 int blockCount=(int)Math.ceil(length*1.0/blockSize);//块数 13 int beginPos=0; 14 int readSize=0; 15 for(int i=0;i<blockCount;i++){ 16 beginPos=i*blockSize; 17 if(i<blockCount-1){ 18 readSize=blockSize; 19 }else{ 20 readSize=(int)length%blockSize; 21 } 22 split(i,beginPos,readSize); 23 } 24 } 25 /* 26 * 块数,起始位置,读取长度 27 */ 28 private static void split(int i,int beginPos,int actualSize) throws IOException { 29 RandomAccessFile ras=new RandomAccessFile("src/com/hh/ThreadDemoe.java","r"); 30 31 ras.seek(beginPos);//随机读取 32 //读取操作 33 byte[] bys=new byte[10]; 34 int len=-1;//接收长度 35 while((len=ras.read(bys))!=-1){ 36 37 if(actualSize>len){//剩余长度大于接收长度 38 System.out.print(new String(bys,0,len)); 39 actualSize-=len; 40 }else{//剩余长度小于接收长度 41 System.out.print(new String(bys,0,actualSize)); 42 break; 43 } 44 } 45 ras.close(); 46 }
}
1 //将分块和读取放在一起,读取全部文件 2 private static void readFileSplit() throws FileNotFoundException, IOException { 3 RandomAccessFile ras=new RandomAccessFile("src/hh/ThreadDemoe.java","r"); 4 long len=ras.length();//文件长度 5 int blockSize=50;//块大小 6 int blockNum=(int) Math.ceil((len*1.0)/blockSize);//块数 7 8 byte[] bys=new byte[blockSize];//缓冲数组大小使用块大小 9 for(int i=0;i<blockNum;i++){ 10 ras.seek(i*blockSize); 11 if(i<blockNum-1){ 12 ras.read(bys); 13 System.out.print(new String(bys,0,blockSize)); 14 }else { 15 int size=ras.read(bys);//文件的最后一块,直接读取返回大小 16 System.out.print(new String(bys,0,size)); 17 } 18 } 19 ras.close(); 20 }
1 import java.io.File; 2 import java.io.FileNotFoundException; 3 import java.io.IOException; 4 import java.io.RandomAccessFile; 5 6 public class FileSplitDemo { 7 public static void main(String[] args) throws IOException { 8 //分好块以后,调用方法读取每一块 9 File f=new File("src/com/hh/ThreadDemoe.java"); 10 long length=f.length();//文件大小 11 int blockSize=60;//块大小 12 int blockCount=(int)Math.ceil(length*1.0/blockSize);//块数 13 int beginPos=0; 14 int readSize=0; 15 for(int i=0;i<blockCount;i++){ 16 beginPos=i*blockSize; 17 if(i<blockCount-1){ 18 readSize=blockSize; 19 }else{ 20 readSize=(int)length%blockSize; 21 } 22 split(i,beginPos,readSize); 23 } 24 } 25 /* 26 * 块数,起始位置,读取长度 27 * 28 * 跟字节流一样使,就是读写用的一个类new出来的对象 29 */ 30 private static void split(int i,int beginPos,int actualSize) throws IOException { 31 RandomAccessFile ras=new RandomAccessFile("src/com/hh/ThreadDemoe.java","r"); 32 RandomAccessFile ras2=new RandomAccessFile("ff/"+i+"Copy","rw"); 33 ras.seek(beginPos);//随机读取 34 //读取操作 35 byte[] bys=new byte[10]; 36 int len=-1;//接收长度 37 while((len=ras.read(bys))!=-1){ 38 39 if(actualSize>len){//剩余长度大于接收长度 40 ras2.write(bys,0,len); 41 actualSize-=len; 42 }else{//剩余长度小于接收长度 43 ras2.write(bys,0,actualSize); 44 break; 45 } 46 } 47 ras.close(); 48 } 49 }
原文:https://www.cnblogs.com/abtious/p/12304296.html