Story: 發送MongoDB 管理軟件到公司郵箱,工做使用。java
一、因爲公司郵箱限制附件大小,大文件沒法發送,故作此程序用於切割大文件成多個小文件,而後逐個發送。apache
二、收到小文件以後,再從新組合成原來的大文件。工具
依賴jar測試
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
FileSplitUtils.javaspa
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); } } } }
測試類code
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(); } } }
.orm