import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class FileProcessor {
public static void main(String[] args) {
splitAndCombineFiles("/input/sample.docx", "/split", "/output/sample.docx");
}
private static void splitAndCombineFiles(String inputPath, String splitFolderPath, String outputPath) {
try {
// Split the original file
splitFile(inputPath, splitFolderPath);
// Combine the split files
combineFiles(splitFolderPath, outputPath);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void splitFile(String inputPath, String splitFolderPath) throws IOException {
File inputFile = new File(inputPath);
byte[] fileContent = readBytesFromFile(inputFile);
int sections = 3;
int bytesPerSection = fileContent.length / sections;
for (int i = 0; i < sections; i++) {
int startIndex = i * bytesPerSection;
int endIndex = (i == sections - 1) ? fileContent.length : (i + 1) * bytesPerSection;
byte[] sectionContent = new byte[endIndex - startIndex];
System.arraycopy(fileContent, startIndex, sectionContent, 0, sectionContent.length);
writeBytesToFile(splitFolderPath + "/split" + (i + 1) + ".bin", sectionContent);
}
}
private static void combineFiles(String splitFolderPath, String outputPath) throws IOException {
List<byte[]> splitContents = new ArrayList<>();
// Load split files
for (int i = 1; i <= 3; i++) {
byte[] content = readBytesFromFile(new File(splitFolderPath + "/split" + i + ".bin"));
splitContents.add(content);
}
// Combine split contents
byte[] combinedContent = concatenateByteArrays(splitContents);
// Save combined content to output file
writeBytesToFile(outputPath, combinedContent);
}
private static byte[] readBytesFromFile(File file) throws IOException {
try (FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);
}
return bos.toByteArray();
}
}
private static void writeBytesToFile(String filePath, byte[] content) throws IOException {
try (FileOutputStream fos = new FileOutputStream(filePath)) {
fos.write(content);
}
}
private static byte[] concatenateByteArrays(List<byte[]> byteArrays) {
int totalLength = 0;
for (byte[] array : byteArrays) {
totalLength += array.length;
}
byte[] result = new byte[totalLength];
int currentIndex = 0;
for (byte[] array : byteArrays) {
System.arraycopy(array, 0, result, currentIndex, array.length);
currentIndex += array.length;
}
return result;
}
}