文件的分割和合并

文件切割器

    public class Io52_1 {
    private static final int SiZE = 1024*1024;


    public static void main(String[] args) throws IOException {
            File file=new File("E:\\Io\\10.mp3");
            splitFile(file);
    }


    public static void splitFile(File file) throws IOException{

        //用读取流关联源文件。
         FileInputStream fis=new FileInputStream(file);

         //定义一个1M的缓冲区
         byte[] buf=new byte[SiZE];

         //创建目的
         FileOutputStream fos=null;
         int len=0;
         int count=1;
         File dir=new File("E:\\partfiles");
         if(!dir.exists()){
             dir.mkdirs();
         }

         while((len=fis.read(buf))!=-1){
             fos=new FileOutputStream(new File(dir,(count++)+".part"));

             fos.write(buf, 0, len);

         }

         fis.close();
         fos.close();
    }


}

文件合并

    public class Io53_1 {
    public static void main(String[] args) throws IOException {
        File dir=new File("E:\\partfiles");
        mergeFile(dir);
    }

    public static void mergeFile(File dir) throws IOException{

        ArrayList<FileInputStream> a1=new ArrayList<FileInputStream>();

        for(int x=1;x<=9;x++){
            a1.add(new FileInputStream(new File(dir,x+".part")));
        }
        Enumeration<FileInputStream> en=Collections.enumeration(a1);
        SequenceInputStream sis=new SequenceInputStream(en);

        FileOutputStream fos=new FileOutputStream(new File(dir,"10.mp3"));

        byte[] buf=new byte[1024];
        int len=0;
        while((len=sis.read(buf))!=-1){
            fos.write(buf, 0, len);
        }

        fos.close();
        sis.close();
    }
}

文件合并

    public class Io53_1 {
    public static void main(String[] args) throws IOException {
        File dir=new File("E:\\partfiles");
        mergeFile(dir);
    }

    public static void mergeFile(File dir) throws IOException{

        ArrayList<FileInputStream> a1=new ArrayList<FileInputStream>();

        for(int x=1;x<=9;x++){
            a1.add(new FileInputStream(new File(dir,x+".part")));
        }
        Enumeration<FileInputStream> en=Collections.enumeration(a1);
        SequenceInputStream sis=new SequenceInputStream(en);

        FileOutputStream fos=new FileOutputStream(new File(dir,"10.mp3"));

        byte[] buf=new byte[1024];
        int len=0;
        while((len=sis.read(buf))!=-1){
            fos.write(buf, 0, len);
        }

        fos.close();
        sis.close();
    }
}

文件切割合并+配置文件

    public class Io54_1 {
    private static final int SiZE = 1024*1024;
    public static void main(String[] args) throws IOException {
/*      File file=new File("E:\\Io\\5.mp3");
        splitFile_2(file);*/


        File dir=new File("E:\\partfiles");
        mergeFile_2(dir);
    }

//切割文件方法
public static void splitFile_2(File file) throws IOException{

        //用读取流关联源文件。
         FileInputStream fis=new FileInputStream(file);

         //定义一个1M的缓冲区
         byte[] buf=new byte[SiZE];

         //创建目的
         FileOutputStream fos=null;
         int len=0;
         int count=1;



         /*
          * 切割文件时,必须记录住被切割文件的名称,以及
          * 切割出来碎片文件的个数,以方便合并。
          * 
          * **/

         File dir=new File("E:\\partfiles");
         if(!dir.exists()){
             dir.mkdirs();
         }

         while((len=fis.read(buf))!=-1){
             fos=new FileOutputStream(new File(dir,(count++) + ".part"));

             fos.write(buf, 0, len);
             fos.close();
         }
         Properties prop=new Properties();

         //将被切割文件的信息保存到prop集合中。
         prop.setProperty("partcount", count+"");
         prop.setProperty("filename", file.getName());

         fos=new FileOutputStream(new File(dir,count+".properties"));

         //将prop集合中的数据存储到集合中
         prop.store(fos, "save file info");


         fis.close();
         fos.close();
    }




//合并文件的方法
public static void mergeFile_2(File dir) throws IOException{
    /*
     * 
     * 获取指定目录下的配置文件对象=============
     * */


    File[] files=dir.listFiles(new SuffixFileter(".properties"));

    if(files.length!=1){
        throw new RuntimeException(dir+",该目录下没有propertise的文件,或者不唯一");
    }
    //配置文件对象
    File confie=files[0];



    //获取该文件中的信息============================


    Properties prop=new Properties();
    FileInputStream fis=new FileInputStream(confie);

    prop.load(fis);
    String filename=prop.getProperty("filename");

    int count =Integer.parseInt(prop.getProperty("partcount"));





    //获取该目录下的所有碎片文件==============
    File[] partFiles=dir.listFiles(new SuffixFileter(".part"));

    if(partFiles.length!=(count-1)){
        throw new RuntimeException("碎片文件不符合要求,个数不对"+count+"个");
    }


    //将碎片文件和流对象关联并存储到集合中=============
    ArrayList<FileInputStream> a1=new ArrayList<FileInputStream>();
    for(int x=1;x<partFiles.length;x++){
        a1.add(new FileInputStream(partFiles[x]));
    }




    //将多个流合并成一个序列流=============
    Enumeration<FileInputStream> en=Collections.enumeration(a1);
    SequenceInputStream sis=new SequenceInputStream(en);

    FileOutputStream fos=new FileOutputStream(new File(dir,filename));

    byte[] buf=new byte[1024];
    int len=0;
    while((len=sis.read(buf))!=-1){
        fos.write(buf, 0, len);
    }

    fos.close();
    sis.close();
}



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值