Java 文件切割工具类
Story: 发送MongoDB 管理软件到公司邮箱,工作使用。
1、由于公司邮箱限制附件大小,大文件无法发送,故做此程序用于切割大文件成多个小文件,然后逐个发送。
2、收到小文件之后,再重新组合成原来的大文件。
依赖jar
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
FileSplitUtils.java
package javax.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Arrays; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; /** * 文件切割工具类 * * @author Logan * @createDate 2019-04-25 * @version 1.0.0 * */ public class FileSplitUtils { /** * 默认切割大小 */ public static final int DEFAULT_SIZE = 1024 * 1024 * 4; /** * 切割指定源文件,并输出到指定目录,按默认大小切割 * * @param srcFile 指定要切割的源文件 * @param outputDir 指定输出目录 * @throws IOException 有异常时抛出,由调用者处理 */ public static void split(File srcFile, String outputDir) throws IOException { split(srcFile, outputDir, DEFAULT_SIZE); } /** * 切割指定源文件,并输出到指定目录 * * @param srcFile 指定要切割的源文件 * @param outputDir 指定输出目录 * @param size 切割大小 * @throws IOException 有异常时抛出,由调用者处理 */ public static void split(File srcFile, String outputDir, int size) throws IOException { try ( FileInputStream inputStream = FileUtils.openInputStream(srcFile); ) { File temp = null; byte[] buffer = new byte[size]; int len = 0; // IOUtils.read(inputStream, buffer) 读取完后,再读取则返回值为0 for (int i = 10000; (len = IOUtils.read(inputStream, buffer)) > 0; i++) { temp = FileUtils.getFile(outputDir, String.valueOf(i)); FileUtils.writeByteArrayToFile(temp, buffer, 0, len); } } } /** * 聚形碎片 * * @param inputDir 碎片输入目录 * @param destFile 聚形目标文件 * @throws IOException 有异常时抛出,由调用者处理 */ public static void combinateFormChips(String inputDir, File destFile) throws IOException { File inputPath = FileUtils.getFile(inputDir); String[] files = inputPath.list(); try ( FileOutputStream outputStream = FileUtils.openOutputStream(destFile); ) { // 按文件名排序 Arrays.sort(files); for (String fileName : files) { File file = FileUtils.getFile(inputPath, fileName); byte[] data = FileUtils.readFileToByteArray(file); IOUtils.write(data, outputStream); } } } }
测试类
package com.java; import java.io.File; import javax.utils.FileSplitUtils; import org.apache.commons.io.FileUtils; /** * 文件切割程序 * * @author Logan * @createDate 2019-04-25 * @version 1.0.0 * */ public class FileSplit { public static void main(String[] args) { try { File srcFile = FileUtils.getFile("G:\\MongoDB.zip"); String chipsDir = "G:\\MongoDB"; FileSplitUtils.split(srcFile, chipsDir); File destFile = FileUtils.getFile("G:\\MongoDB2.zip"); FileSplitUtils.combinateFormChips(chipsDir, destFile); } catch (Exception e) { e.printStackTrace(); } } }
.