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();
        }
    }

}

 

 

 

.

posted @ 2019-04-25 22:42  诚信天下  阅读(1640)  评论(0编辑  收藏  举报