题目
将一个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();
}
}