• 文件分割


     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 }

     --------------------------------------------------------------------------------------------------

    使用面向对象思想进行封装

      1 import java.io.BufferedInputStream;
      2 import java.io.File;
      3 import java.io.FileInputStream;
      4 import java.io.FileOutputStream;
      5 import java.io.IOException;
      6 import java.io.InputStream;
      7 import java.io.OutputStream;
      8 import java.io.RandomAccessFile;
      9 import java.io.SequenceInputStream;
     10 import java.util.ArrayList;
     11 import java.util.Vector;
     12 
     13 public class FileSplitDemo {
     14     private File f;
     15     private String dest;//父文件夹
     16     private ArrayList<String> list=new ArrayList<String>();
     17     private int blockSize;
     18     private long length;//文件大小
     19     private int blockCount;//块数
     20      public FileSplitDemo(String srcStr, String dest, int blockSize) {
     21         super();
     22         this.f = new File(srcStr);
     23         this.dest = dest;
     24         this.blockSize = blockSize;
     25         init();
     26     }
     27     private void init(){
     28         length=f.length();
     29         blockCount=(int)Math.ceil(length*1.0/blockSize);
     30         for(int i=0;i<blockCount;i++){
     31             list.add(dest+"/"+i+"-"+this.f.getName());
     32             System.out.println(list.get(i));
     33         }
     34         
     35     } 
     36      
     37      
     38      
     39     public  void split1() throws IOException {
     40          //分好块以后,调用方法读取每一块
     41          int beginPos=0;
     42          int readSize=0;
     43          for(int i=0;i<blockCount;i++){
     44              beginPos=i*blockSize;
     45              if(i<blockCount-1){
     46                  readSize=blockSize;
     47              }else{
     48                  readSize=(int)length%blockSize;
     49              }
     50              split(i,beginPos,readSize);
     51          }
     52     }
     53      /*
     54       * 块数,起始位置,读取长度
     55       * 
     56       * 跟字节流一样使,就是读写用的一个类new出来的对象
     57       */
     58     private  void split(int i,int beginPos,int actualSize) throws IOException {
     59         RandomAccessFile ras=new RandomAccessFile(f,"r");
     60         RandomAccessFile ras2=new RandomAccessFile(list.get(i),"rw");
     61          ras.seek(beginPos);//随机读取
     62          //读取操作
     63          byte[] bys=new byte[10];
     64          int len=-1;//接收长度
     65          while((len=ras.read(bys))!=-1){
     66              
     67              if(actualSize>len){//剩余长度大于接收长度
     68                  ras2.write(bys,0,len);
     69                  actualSize-=len;
     70              }else{//剩余长度小于接收长度
     71                  ras2.write(bys,0,actualSize);
     72                 break;
     73              }
     74          }
     75          ras.close();
     76     }
     77     //将多个文件合并到一个文件中,使用多个输入流和一个输出流
     78     private void merge() throws IOException{
     79         OutputStream os=new FileOutputStream("ff/merge.txt",true);
     80         byte[] bys=new byte[1024];
     81         int len;
     82         for(int i=0;i<blockCount;i++){
     83             InputStream is=new FileInputStream(list.get(i));
     84             while((len=is.read(bys))!=-1){
     85                 os.write(bys,0,len);
     86             }
     87             is.close();
     88         }
     89         os.close();
     90     }
     91     //将多个文件合并到一个文件中,使用序列流和一个输出流
     92     private void merge2() throws IOException{
     93         OutputStream os=new FileOutputStream("ff/merge.txt",true);
     94         Vector<InputStream> vi=new Vector<InputStream>();//集合对象
     95         for(int i=0;i<blockCount;i++){
     96             vi.add(new BufferedInputStream(new FileInputStream(list.get(i))));
     97         }
     98         SequenceInputStream sis=null;//序列流
     99         sis=new SequenceInputStream(vi.elements());
    100         
    101         byte[] bys=new byte[1024];
    102         int len;
    103         while((len=sis.read(bys))!=-1){
    104             os.write(bys,0,len);
    105         }
    106         sis.close();
    107         os.close();
    108     }
    109     
    110     
    111     //测试
    112     public static void main(String[] args) throws IOException {
    113         FileSplitDemo fsd=new FileSplitDemo("src/com/hh/ThreadDemoe.java", "ff", 50);
    114         fsd.split1();
    115         //fsd.merge();
    116         fsd.merge2();
    117     }
    118 }
  • 相关阅读:
    python基础--函数的命名空间and作用域
    MYSQL基础常识
    python基础--函数
    python基础--文件相关操作
    python基础--字符编码以及文件操作
    homebrew长时间停在Updating Homebrew 这个步骤
    python基础--数据类型的常用方法2
    python基础--数据类型的常用方法1
    python基础--定义装饰器(内置装饰器)
    angular创建组件
  • 原文地址:https://www.cnblogs.com/abtious/p/12304296.html
Copyright © 2020-2023  润新知