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

相关文章
相关标签/搜索