java切割大文件方法

本文介绍了一个实用的文件分割工具,能够将大文件按照指定大小分割成多个小文件,并提供了完整的Java实现代码。该工具适用于需要对大文件进行管理和处理的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package dividefile;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.IOException;

 

public class dividefile {

    public static final String SUFFIX = ".sql"; // 分割后的文件名后缀

 

    // 将指定的文件按着给定的文件的字节数进行分割文件,其中name指的是需要进行分割的文件名,size指的是指定的小文件的大小

    public static String[] divide(String name, long size) throws Exception {

        File file = new File(name);

        if (!file.exists() || (!file.isFile())) {

            throw new Exception("指定文件不存在!");

        }

        // 获得被分割文件父文件,将来被分割成的小文件便存在这个目录下

        File parentFile = file.getParentFile();

        // 取得文件的大小

        long fileLength = file.length();

 

        System.out.println("文件大小:" + fileLength + " 字节");

 

        if (size <= 0) {

            size = fileLength / 2;

        }

        // 取得被分割后的小文件的数目

        int num = (fileLength % size != 0) ? (int) (fileLength / size + 1)

                : (int) (fileLength / size);

        // 存放被分割后的小文件名

        String[] fileNames = new String[num];

        // 输入文件流,即被分割的文件

        FileInputStream in = new FileInputStream(file);

        // 读输入文件流的开始和结束下标

        long end = 0;

        int begin = 0;

        // 根据要分割的数目输出文件

        for (int i = 0; i < num; i++) {

            // 对于前num - 1个小文件,大小都为指定的size

            File outFile = new File(parentFile, file.getName() + i + SUFFIX);

            // 构建小文件的输出流

            FileOutputStream out = new FileOutputStream(outFile);

            // 将结束下标后移size

            end += size;

            end = (end > fileLength) ? fileLength : end;

            // 从输入流中读取字节存储到输出流中

            for (; begin < end; begin++) {

                out.write(in.read());

            }

            out.close();

            fileNames[i] = outFile.getAbsolutePath();

        }

        in.close();

        return fileNames;

    }

 

    public static void readFileMessage(String fileName) {// 将分割成的小文件中的内容读出

        File file = new File(fileName);

        BufferedReader reader = null;

        try {

            reader = new BufferedReader(new FileReader(file));

            String string = null;

            // 按行读取内容,直到读入null则表示读取文件结束

            while ((string = reader.readLine()) != null) {

                System.out.println(string);

            }

            reader.close();

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            if (reader != null) {

                try {

                    reader.close();

                } catch (IOException e1) {

                }

            }

        }

    }

 

    public static void main(final String[] args) throws Exception {

        String name = "G:/ad.tar/ad/ad_samples.dat";

        long size = 1024 * 1024 * 4;// 1K=1024b(字节)

        String[] fileNames = dividefile.divide(name, size);

        System.out.println("文件" + name + "分割的结果如下:");

        for (int i = 0; i < fileNames.length; i++) {

            System.out.println(fileNames[i] + "的内容如下:");

            // FenGeFile.readFileMessage(fileNames[i]);

            System.out.println();

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值