import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class TestFile {
@Test
public void testChunk() throws IOException {
File sourceFile = new File("D:\\data\\lucene.avi");
String chunkFileFolder = "D:\\data\\chunks\\";
long chunkFileSize = 1 * 1024 * 1024;
long chunkFileNum = (long) Math.ceil(sourceFile.length() * 1.0 / chunkFileSize);
RandomAccessFile raf_read = new RandomAccessFile(sourceFile, "r");
byte[] b = new byte[1024];
for (int i = 0; i < chunkFileNum; i++) {
File chunkFile = new File(chunkFileFolder + i);
RandomAccessFile raf_write = new RandomAccessFile(chunkFile, "rw");
int len = -1;
while ((len = raf_read.read(b)) != -1) {
raf_write.write(b, 0, len);
if (chunkFile.length() >= chunkFileSize) {
break;
}
}
raf_write.close();
}
raf_read.close();
}
@Test
public void testMergeFile() throws IOException {
String chunkFileFolderPath = "D:\\data\\chunks\\";
File chunkFileFolder = new File(chunkFileFolderPath);
File[] files = chunkFileFolder.listFiles();
List<File> fileList = Arrays.asList(files);
Collections.sort(fileList, (o1, o2) -> {
if (Integer.parseInt(o1.getName()) > Integer.parseInt(o2.getName())) {
return 1;
}
return -1;
});
File mergeFile = new File("D:\\data\\lucene_merge.avi");
boolean newFile = mergeFile.createNewFile();
RandomAccessFile raf_write = new RandomAccessFile(mergeFile, "rw");
byte[] b = new byte[1024];
for (File chunkFile : fileList) {
RandomAccessFile raf_read = new RandomAccessFile(chunkFile, "r");
int len = -1;
while ((len = raf_read.read(b)) != -1) {
raf_write.write(b, 0, len);
}
raf_read.close();
}
raf_write.close();
}
}