package com.demo.account.service;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* Created by on 2023/10/10 10:17
*
* @Maintainance: jerryzshiyan@163.com
* @author: Jerry
* @Project: nacos-service-consumer
*/
public class TestFile {
@Test
public void testSplit() throws IOException {
//源文件地址
File sourceFile = new File("/Users/jerry/Desktop/PPT/ToastMaster-Speech.zip");
//块文件目录
String chunkFileFolder = "/Users/jerry/Desktop/PPT/split/";
//块文件大小
int chunkFileSize = 10 * 1024 * 1024;
//块文件数量
int chunkFileNum = (int) Math.ceil(sourceFile.length() * 1.0 / chunkFileSize);
//
RandomAccessFile readFile = new RandomAccessFile(sourceFile, "r");
byte[] bytes = new byte[1024];
for(int i = 0; i < chunkFileNum; i++) {
File chunkFile = new File(chunkFileFolder + i);
int len = -1;
//创建块文件
RandomAccessFile writeFile = new RandomAccessFile(chunkFile, "rw");
while((len = readFile.read(bytes)) != -1) {
writeFile.write(bytes, 0 ,len);
//如果块文件大小达到1M,就读下一块
if(chunkFile.length() >= chunkFileSize) {
break;
}
}
writeFile.close();
}
readFile.close();
}
@Test
public void merge() throws IOException {
//块文件目录
String chunkFileFolderPath = "/Users/jerry/Desktop/PPT/split";
//获取块文件对象
File chunkFileFolder = new File(chunkFileFolderPath);
//块文件列表
File[] files = chunkFileFolder.listFiles();
//将文件排序
List<File> filesList = Arrays.asList(files);
Collections.sort(filesList, (o1, o2) -> {
if(Integer.parseInt(o1.getName()) > Integer.parseInt(o2.getName())){
return 1;
}
return -1;
});
//合并后的文件
File mergerFile = new File("/Users/jerry/Desktop/PPT/ToastMaster-Speech-copy.zip");
//创建新文件
boolean newFile = mergerFile.createNewFile();
//创建写对象
RandomAccessFile writeFile = new RandomAccessFile(mergerFile, "rw");
byte[] b = new byte[1024];
for(File chunkFile : filesList){
int len = -1;
//创建读块文件的对象
RandomAccessFile readFile = new RandomAccessFile(chunkFile, "r");
while((len = readFile.read(b)) != -1){
writeFile.write(b, 0, len);
}
readFile.close();
}
writeFile.close();
}
}