public class MergeFileDemo_2 {
public static void main(String[] args) throws IOException {
File dir = new File("D:\\a\\");
mergeFile(dir);
}
/*
对碎片文件进行合并
*/
public static void mergeFile(File dir)
throws IOException {
if (!dir.exists())
throw new RuntimeException("文件不存在");
// 获取后缀名为 .ini 的文件
File[] files = dir.listFiles(new SuffixFilter(".ini"));
// 判断该配置文件是否是唯一的
if (files.length != 1)
throw new RuntimeException("配置文件不唯一");
// 记录配置文件信息
File con = files[0];
// ======获取文件对象
Properties prop = new Properties();
FileInputStream fis = new FileInputStream(con);
prop.load(fis);// 将文件加载进流
String fileName = prop.getProperty("fileName");
int count = Integer.parseInt(prop.getProperty("fileCount"));
// 获取目录中的碎片文件
File[] partFile = dir.listFiles(new SuffixFilter(".part"));
if (partFile.length != (count-1))
throw new RuntimeException("碎片文件数量不正确");
// 创建集合,将碎片文件存储进集合中
List<FileInputStream> al = new ArrayList<FileInputStream>();
for (File f : partFile) {
al.add(new FileInputStream(f)); // 读取碎片文件
}
Enumeration<FileInputStream> en = Collections.enumeration(al); // 将集合中的流取出
SequenceInputStream sis = new SequenceInputStream(en); // 将流合并
FileOutputStream fos = new FileOutputStream(new File(dir, fileName)); // 目的地
byte[] buf = new byte[1024 * 1024];
int len = 0;
while ((len = sis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
System.out.println("合并文件成功!");
sis.close();
fos.close();
}
}
|
|