zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    
    }

    .

  • 相关阅读:
    BF算法和KMP算法
    Python课程笔记 (五)
    0268. Missing Number (E)
    0009. Palindrome Number (E)
    0008. String to Integer (atoi) (M)
    0213. House Robber II (M)
    0198. House Robber (E)
    0187. Repeated DNA Sequences (M)
    0007. Reverse Integer (E)
    0006. ZigZag Conversion (M)
  • 原文地址:https://www.cnblogs.com/jonban/p/10771625.html
Copyright © 2011-2022 走看看