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

    .

  • 相关阅读:
    用mstsc連接服務器收到超出最大連接數的問題
    DIV+CSS自適就高度解決方案
    与佛关于婚外情的经典对白[轉]
    [轉]修改计算机名,sharepoint站点打不开了
    今天測試服務器壞了
    Microsoft.Jet.Oledb.4.0 找不到提供者或未安裝問題
    今天開始學習silverlight了
    FreeTextBox運行錯誤解決
    使用AJAXControlToolkit出現的問題
    子类如何调用被子类override了的方法?
  • 原文地址:https://www.cnblogs.com/jonban/p/10771625.html
Copyright © 2020-2023  润新知