切割文件和合并文件
博客专区 > LM_Mike 的博客 > 博客详情
切割文件和合并文件
LM_Mike 发表于5个月前
切割文件和合并文件
  • 发表于 5个月前
  • 阅读 9
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

一、切割文件代码如下:

public class SplitFileTest {
    public static void main(String[] args) throws IOException {
        /**
         *  需求:将一个媒体文件切割成多个碎片(每个碎片的大小为1M),并添加配置说明文件
         *  1.创建(指定)一个文件夹,用于保存切割出来的碎片
         *  2.创建源文件对象,并传入一个输入流对象
         *  3.创建一个缓冲区为1M
         *  4.创建一个输入流对象并将源文件对象传入,创建一个输出流对象引用
         *  5.每个缓冲区获取到碎片时,使用输出对应流对象写入到一个新的文件
         *  6.写相应的信息到配置文件
         */
        File partDir = new File("F:\\partsDir");
        File src = new File("F:\\周杰伦 - 简单爱.mp3");
        splitFile(src,partDir);

    }

    private static void splitFile(File src, File partDir) throws IOException {
        if(!partDir.exists()){
            partDir.mkdirs();
        }
        byte[] buf = new byte[1024*1024];
        FileInputStream fis = new FileInputStream(src);
        FileOutputStream fos = null;
        int len = 0;
        int count = 1;
        while ((len=fis.read(buf)) != -1){
            fos = new FileOutputStream(new File(partDir,"简单爱-part"+(count++)));
            fos.write(buf,0,len);
            fos.close();
        }

        String filename = src.getName();
        int partCount = count;

        fos = new FileOutputStream(new File(partDir,count+".properties"));
        //创建一个属性集。
        Properties prop = new Properties();
         //将配置信息存储到属性集中
        prop.setProperty("filename",src.getName());
        prop.setProperty("partCount",Integer.toString(partCount));

        //将属性集中的信息持久化
        prop.store(fos,"part file info");

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

二、合并文件代码如下:

public class MergeFileTest {
    public static void main(String[] args) throws IOException {
        /**
         *  需求:使用SequenceInputStream类来合并碎片文件
         *  1.创建一个list集合,来保存指定文件夹碎片流集合
         *  2.用集合工具类方法Collections.enumeration()方法将list集合转换为Enumeration
         *  3.新建一个SequenceInputStream流对象,并传入第2步的Enumeration
         *  4.创建一个输出流对象,创建缓冲区循环写第3步SequenceInputStream读取的内容
         */

        File partDir = new File("F:\\partsDir");
        List<FileInputStream> list = new ArrayList<FileInputStream>();
        for (int i=1;i<12;i++){
            FileInputStream fis = new FileInputStream(new File(partDir,"简单爱-part"+i));
            list.add(fis);
        }
        Enumeration<FileInputStream> en = Collections.enumeration(list);
        SequenceInputStream sis = new SequenceInputStream(en);

        FileOutputStream fos = new FileOutputStream(new File(partDir,"000.mp3"));

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

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

共有 人打赏支持
粉丝 2
博文 217
码字总数 37930
×
LM_Mike
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: