Java 文件切割工具類

 

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

相關文章
相關標籤/搜索