IO练习题--文件分割

题目

写一个方法,将一个文件分割为每份1MB大小的若干份,存储在一个temp的文件夹中,
然后再写一个方法,将这若干份合并为一个文件.

实现代码

public class Split_Combine {
    public static void main(String[] args) {
        File f = new File("D:\\Tule - Fearless.mp3");
        try {
            Split(f);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("文件找不到");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("读写异常");
        }

        File f1 = new File("E://temp");
        try {
            combain(f1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

	//文件的分割
    public static void Split(File file) throws IOException {
        if (file != null || file.exists()) { //文件是否为空,是否存在
            //创建临时文件夹
            File f = new File("E:\\temp");
            //是否存在,不存在创建
            if (!f.exists()) {
                f.mkdirs();
            }
            long size = file.length();//文件大小
            long t = 1024 * 1024;//每份大小
            long count = size % 2 == 0 ? size / t : size / t + 1;//文件个数
            //先输入一个文件
            FileInputStream in = new FileInputStream(file);
            byte[] b = new byte[1024];
            int length = 0;
            for (int i = 0; i < count; i++) {
                int sum = 0;
                FileOutputStream out = new FileOutputStream("E:\\temp\\" + (i + 1) + ".temp");
                while ((length = in.read(b)) != -1) {
                    out.write(b, 0, length);
                    sum += length;
                    if (sum >= t) {
                        break;
                    }
                }
            }
        }
    }

	//文件的合并
    public static void combain(File file) throws IOException {
        File[] fs = file.listFiles();//获取临时文件中的所有文件
        if (fs.length > 0) {
            FileOutputStream out = new FileOutputStream("D:\\Tule - Fearless1.mp3");
            for (int i = 0; i < fs.length; i++) {
                FileInputStream in = new FileInputStream("E:\\temp\\" + (i + 1) + ".temp");
                byte[] b = new byte[1024];
                int length = 0;
                while ((length = in.read(b)) != -1) {
                    out.write(b, 0, length);
                }
                in.close();
            }
            out.close();
            for (int i = 1; i < fs.length; i++) {
                fs[i].delete();
            }
            file.delete();

        }
    }
}
posted @ 2021-12-03 17:19  肖帆咪  阅读(29)  评论(0编辑  收藏  举报