Java实现大文件的切割与合并操作示例

发布时间:2020-09-27 02:25:08

来源:脚本之家

阅读:99

作者:HiBoyljw

本文实例讲述了Java实现大文件的切割与合并操作。分享给大家供大家参考,具体如下:

这里实现对大文件的切割与合并。

按指定个数切(如把一个文件切成10份)或按指定大小切(如每份最大不超过10M),这两种方式都可以。

在这里我只是给大家写下我自己的一点简单的代码:

package io2;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.SequenceInputStream;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Enumeration;

import javax.swing.JFileChooser;

public class FileSplitDemo {

/**

* 实现对大文件的切割与合并。 按指定个数切(如把一个文件切成10份)或按指定大小切(如每份最大不超过10M),这两种方式都可以。

*/

public static void main(String[] args) {

JFileChooser jfc = new JFileChooser();// Swing中的选择文件

// 选择文件

int result = jfc.showOpenDialog(null);// 显示框架用于选择文件

File file = null;// 要切割的文件

File dest = null;// 目的地文件

try {

if (result == JFileChooser.APPROVE_OPTION) {// 选中文件

// 切割文件

file = jfc.getSelectedFile();// 用户选择的文件

dest = new File(file.getParent(), "spliFile");

cutingFile(file, dest);// 切割方法

// 2合并(运行时,直接对刚才切割的那些文件碎片进行合并)

String fileName = file.getName();

mergeDemo(dest, fileName);// 合并文件

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private static void mergeDemo(File dest, String fileName)

throws IOException {

// 健壮性防护(用File对象去开道)

if (!dest.exists()) {

throw new RuntimeException("文件不存在");

}

// 用一个文件数组将里面的文件都装起来

File parth[] = dest.listFiles();// 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

if (parth.length == 0) {

throw new RuntimeException("碎片不存在");

}

// y用序列流来合并

ArrayList list = new ArrayList();

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

// list.add(new FileInputStream(parth[i]));//不能这样,这样合并出来的文件是顺序乱的

// }

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

list.add(new FileInputStream(new File(dest, fileName + (i + 1)

+ "part")));// 套接技术,文件加的顺序要和原文件一样

}

// 枚举对象接口

Enumeration en = Collections.enumeration(list);

SequenceInputStream sq = new SequenceInputStream(en);

// 写入到新文件中

FileOutputStream fou = new FileOutputStream(new File(dest, fileName));

byte buf[] = new byte[1024];

sq.read(buf);

int len = 0;

while ((len = sq.read(buf)) > 0) {

fou.write(buf, 0, len);

}

fou.close();

sq.close();

}

private static void cutingFile(File source, File dest) {

// 切割

try {

FileInputStream fis = new FileInputStream(source);

if (!dest.exists()) {// 文件操作IO流要判断文件是否存在。

dest.mkdir();

}

byte buf[] = new byte[1024 * 1024];// 1M

fis.read(buf);

int len = 0;

int cout = 1;

while ((len = fis.read(buf)) != -1) {

// 用OUT流来切割文件

FileOutputStream fout = new FileOutputStream(new File(dest,

source.getName() + (cout++) + "part"));

fout.write(buf, 0, len);

fout.close();

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

文件切割:把一个文件切割成多个碎片,每个碎片的大小不超过1M。自己可把功能进一步扩展:切割前的文件名、长度,切割后的碎片个数、文件名等信息可写到第一个碎片中或另外用properties把这些写到配置文件中。

文件合并:这里简单假设已知被合并目录的File对象和原文件的名字。其实这些完全可以做成活的,如把这些信息保存在碎片文件或配置文件,也可以同样用文件选择对话框来读取用户的选择。

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

java实现对大文件切割下载_Java实现大文件的切割与合并操作示例相关推荐

  1. java 高效文件批量下载_java实现高效文件下载

    java实现高效文件下载 本文我们介绍几种方法下载文件.从基本JAVA IO 到 NIO包,也介绍第三方库的一些方法,如Async Http Client 和 Apache Commons IO. 最 ...

  2. java大文件加密速度_java版AES文件加密速度问题

    简单的一个java版的AES文件加密demo, 运行正常, 但文件一大速度就会很慢,不知道是否能优化一下,以提高增快加密的速度 或许是我的代码写法有问题, 希望各位大俠指正 import java.i ...

  3. java导出pdf文件并下载_java根据模板生成pdf文件并导出

    1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy com.itextpdf itextpdf 5.5.10 [html ...

  4. java csv下载_java 生成csv文件,弹出下载对话框。。。

    1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中.这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限).这个就不写示例了. 2.在服务器端把文件 ...

  5. java多个文件同时下载_JAVA 如何一次下载多个文件

    future = pool.submit(new Callable(){ @Override public HttpURLConnection call() throws Exception { Ht ...

  6. Leaflet中加载离线OSM瓦片地图(使用OfflineMapMaker切割下载离线png地图文件)

    场景 Leaflet快速入门与加载OSM显示地图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122290880 上面加载显示 ...

  7. java 调用 swf 文件上传_java SpringMvc 实现文件在线预览(openoffice+swftools+flexpaper)

    项目需求:服务器接受的文件当下只能下载之后才能浏览内容,现需要后台能在线浏览到文件内容,避免繁琐无用文件下载操作. 通过几天网上资料搜索,目前免费的在线预览开发技术使用最多还是(openoffice+ ...

  8. java中csv文件怎么制作_Java生成CSV文件实例详解

    本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils ...

  9. java如何处理csv文件上传_java处理csv文件上传示例

    前言:示例只是做了一个最最基础的上传csv的示例,如果要引用到代码中去,还需要根据自己的业务自行添加一些逻辑处理. ReadCsvUtil工具类 package com.hanfengyeqiao.g ...

最新文章

  1. LINUX下用CTRL+R快速搜索HISTORY历史命令,快速索引到之前使用过的命令行语句
  2. python编写测试工具-python 写一个性能测试工具(一)
  3. JAVA中定义常量的几种方式
  4. CentOS(5.8/6.4)linux生产环境若干优化实战------就爱运维
  5. 一只青蛙跳向三个台阶_青蛙跳台阶
  6. HDU - 5790 Prefix(主席树+字典树)
  7. 1190 最小公倍数之和 V2
  8. ubuntu安装配置方法【转】
  9. LeetCode 285. 二叉搜索树中的顺序后继(中序遍历)
  10. Java小白进阶笔记(3)-初级面向对象
  11. linux命令passwd各个参数含义
  12. 吴恩达机器学习7——支持向量机SVM
  13. mac电脑装java环境变量_Mac系统下安装jdk并配置环境变量的方法
  14. 小项目: low版本的 员工信息程序:
  15. 2020-6 android kernel vulnerability
  16. SPSS主成分分析(PCA)
  17. 软件测试常用的测试方法有哪些?
  18. 【软件测试】一名医院的护士,带着梦追逐诗和远方,拿下测试岗14K......
  19. excel粘贴时出现故障_你必将碰到的巨崩溃的问题,Excel复制粘贴时,突然提示“不同单元格格式太多“,我快疯了......
  20. 宝马 OR 奥迪?NONONO,还得看我Li Auto,新款六座SUV强势来袭

热门文章

  1. 1803无法升级到2004_汽车排放国标是什么意思:1/2/3/4/5/6的升级是为了什么?
  2. springboot设置运行内存_Docker 如何运行多个 Springboot?
  3. Flink常见流处理API
  4. mysql的cpu飙升到500_[MySQLCPU]线上飙升800%,load达到12的解决过程
  5. 不要再纠结卷积的公式啦!0公式深度解析全连接前馈网络与卷积神经网络!
  6. 如果有一天,小夕不再萌...
  7. Spring Boot中的事务管理
  8. 会议 | 2018年全国知识图谱与语义计算大会(CCKS 2018)
  9. ChineseDiachronicCorpus项目,大规模中文历时语料库
  10. Java总结:正则表达式