拆分、合并文件

题目

将一个music.mp3文件, 拆分成多个小文件, 再将多个小文件, 合并成一个mp3文件

分析

拆分文件
1、封装原文件和一个要拆分到的文件夹,判断是否有文件夹,若没有创建一个
2、进行拆分文件,将字节数组缓冲区大小设置为1024 x 1024,表示将文件以字节数组大小进行拆分,循环来将拆分的文件放入相应的文件夹中
3、最后记得释放资源
合并文件
1、先封装需要合并文件所在的文件夹,将拆分好的文件存在 Vector 集合中
2、使用序列流 SequenceInputStream 来读取文件
3、将字节数组缓冲区大小设置为1024 x 1024,因为所拆分的文件大小最大为1024 x 1024,循环来将文件复制
4、释放资源

程序代码

package com.company.deno;


import java.io.*;
import java.util.Vector;

public class MyDemo {
    public static void main(String[] args) throws IOException {
        //拆分文件
        resolution();
        //合并文件
        merge();
    }
    private static void merge() throws IOException {
        File file1 = new File("E:\\music");
        File[] files = file1.listFiles();
        //将拆分好的文件存在 Vector 集合中
        Vector<FileInputStream> v = new Vector<>();
        for (File f : files) {
            if (f.isFile() && f.getName().endsWith(".mp3")) {
                FileInputStream in = new FileInputStream(f);
                v.add(in);
            }
        }
        //使用序列流 SequenceInputStream 来读取文件
        SequenceInputStream sin = new SequenceInputStream(v.elements());
        byte[] bytes = new byte[1024 * 1024];
        int len = 0;
        FileOutputStream out = new FileOutputStream("E:\\music1.mp3");
        while ((len = sin.read(bytes)) != -1) {
            out.write(bytes, 0, len);
            out.flush();
        }
        sin.close();
        out.close();
    }

    private static void resolution() throws IOException {
    	//封装原文件
        File file = new File("music.mp3");
        //封装一个文件夹
        File file1 = new File("E:\\music");
        //判断是否有文件,若没有创建一个
        if (!file1.exists()) {
            file1.mkdirs();
        }
        FileInputStream in = new FileInputStream(file);
        //拆分文件
        byte[] bytes = new byte[1024 * 1024];
        int len = 0;
        int i = 1;
        while ((len = in.read(bytes)) != -1) {
        	//将文件拆分进行复制
            FileOutputStream out = new FileOutputStream(new File(file1, (i++) + ".mp3"));
            out.write(bytes, 0, len);
            out.close();
        }
        in.close();
    }
}
发布了68 篇原创文章 · 获赞 0 · 访问量 1167

猜你喜欢

转载自blog.csdn.net/weixin_45849948/article/details/105129662