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

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程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android junit单元测试

1.首先要把下面配置好&#xff08;注释的地方 Android studio 无需配置&#xff09;&#xff0c;targetPackage项目的包名 2.创建Android项目会自动生成test包&#xff0c;只能在test包下使用junit测试 3.在方法的前面加上Test就可以使用junit了 4.解释一下&#xff1a; assert…

21世纪20年代改变世界的十大趋势

来源&#xff1a;美国银行美国银行发布了新报告“21世纪20年代改变世界的十大趋势”。全球化高峰&#xff1a;世界范围内劳力、货物和资本自由流动将终结。在这种趋势下&#xff0c;赢家是本地市场和实物资产&#xff0c;而输家则是全球市场。衰退&#xff1a;更多的FMS投资者认…

多个if用什么设计模式_抽丝剥茧——单例设计模式

单例设计模式兄弟们好&#xff0c;今天是最后一个设计模式了&#xff0c;也是我们最熟悉的单例设计模式&#xff0c;可以说这个设计模式是我们最先接触到的设计模式了。想当年学习JavaSE的时候&#xff0c;老师聊到一个「饿汉式和懒汉式」&#xff0c;我还纠结了半天&#xff0…

volatile的适用场合

1对变量的写入操作不依赖其当前值 不满足&#xff1a;number/count count*5等 满足Boolean变量、记录温度变化的变量等 2.该变量没有包含在具有其他变量的不变式中 不满足&#xff1a;不变式low<up 转载于:https://www.cnblogs.com/CCCrunner/p/6444550.html

计算机密码行业专题研究:网络安全最大弹性领域

来源&#xff1a;未来智库报告摘要&#xff1a;1、传统市场:政策驱动&#xff0c;预计传统密码增长中枢提升至30%密码是网络安全刚需&#xff0c;密码法2020年1月1日实施。政策驱动客户下沉&#xff0c;行业中期增速从10%提升至30%。2、新兴市场:物联网安全的基石&#xff0c;未…

python3.7和2.7_为两个python版本(2.7和3.7)Windows 10安装pip

Eylo堆垛机我已经在python3.7中成功地安装了pip&#xff0c;但是似乎无法为python2.7安装它。在我尝试过通过下载get来实现这一点-点对点并在安装它的目录中运行cmd按住Shift键&#xff0c;然后单击“打开命令窗口”python get-pip.py然后继续更新pip。。。它提供了这个Collect…

人工智能军事对抗技术发展趋势

来源&#xff1a;战略前沿技术人工智能军事对抗技术人工智能&#xff08;AI&#xff09;作为新一代科技革命的典型代表性技术&#xff0c;目前已在世界各国的工业、金融、娱乐和公共安全等领域广泛应用&#xff0c;而其在军事领域的应用也正在快速发展。随着人工智能技术与军事…

java语言计算器怎么写_求助,一个计算器的括号功能怎么写啊。

求助&#xff0c;一个计算器的括号功能怎么写啊。import javax.swing.*;import javax.swing.event.*;import java.awt.*;import java.awt.event.*;public class computer1 extends JFrame implements ActionListener{Double r1,r2,total,c1,c2;int i,j,j110,j27,c;JButton[] Bu…

mysql递归层次查询

mysql递归层次查询 最近在做一个从oracle数据库到mysql数据库的移植&#xff0c;遇到一个这样的问题 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但shi&#xff0c;在MySQL的目前版本中还没有对应的函…

windows打开的winform当前焦点 是否是hwnd_推介几款 windows 下非常好用的工具

在下工具控一枚&#xff0c;平时会留意收集各种各样给我们生活生产带来便捷的工具&#xff0c;毕竟人生苦短&#xff1b;下面主要介绍一些我在 Windows 系统上发现的一些好用的工具&#xff0c;并且会一笔带过主要优点特点&#xff0c;具体详细用法可以搜一下&#xff0c;相关帖…

借力5G,云VR将推动VR产业迎“第二春”

来源&#xff1a;VR每日必看在近期举办的第八届全球物联网峰会上&#xff0c;作为中国电信5G商用产品的集约运营单位&#xff0c;号百控股在会展区域设置了天翼云VR产品专区&#xff0c;演示了韩国LG U独家授权内容&#xff0c;以及自制VR视频&#xff0c;引入关注。VR云化将实…

java强制删文件夹_java删除文件或文件夹的方法

java删除文件或文件夹的方法java里面删除文件夹时候&#xff0c;如果该文件夹下有内容&#xff0c;即其下包含的有文件或文件夹&#xff0c;当你执行java.io.File.delete(File file)方法时候&#xff0c;不能成功删除&#xff0c;那么如果我们想成功删除&#xff0c;该怎么办的…

python语言设计学习方向_学好Python开发就业方向有哪些?

原标题&#xff1a;学好Python开发就业方向有哪些&#xff1f;近年来&#xff0c;Python市场火爆&#xff0c;从业人员薪资不断增加&#xff0c;选择学Python的人也在逐年增多。然而&#xff0c;很多人学Python只是盲目的跟随潮流&#xff0c;对于Python却不甚了解&#xff0c;…

Linq的优点以及注意事项

转载于:https://www.cnblogs.com/hubbert123/p/6429926.html

低调!中国北斗核心卫星部署完成,开启“全球时代”!超越GPS指日可待

来源&#xff1a;科技杂谈、百度物联网智库 整理发布导 读2019年12月16日15时22分&#xff0c;我国在西昌卫星发射中心用长征三号乙运载火箭&#xff08;及配套远征一号上面级&#xff09;&#xff0c;以“一箭双星”的方式成功将第52、53颗北斗导航卫星发射升空。至此&#x…

mysql 读取文件_关于mysql:逐行读取文件而不将整个文件加载到内存中

我正在使用50 Gb MySQL导出文件&#xff0c;并对其执行脚本操作列表以转换为SQLite3可加载形式(我从这里得到的线索&#xff1a;脚本将mysql dump sql文件转换为可以导入sqlite3的格式D b )。我尚未研究MySQL转储的结构&#xff0c;数据是从第三方获得的。我可以看到它具有创建…

python深浅拷贝 面试_Python面试宝典之基础篇-02

原标题&#xff1a;Python面试宝典之基础篇-02我觉得你如果正在找工作&#xff0c;我的Python面试宝典几期教程&#xff0c;你一定得花时间看完了&#xff01;题目006&#xff1a;说说Python中的浅拷贝和深拷贝。点评&#xff1a;这个题目本身出现的频率非常高&#xff0c;但是…

磁盘挂载基本概念

基本概念PV( 全称 Physical Volume , 物理卷):普通的直接坊问的存储设备&#xff0c;有固定的和可移动的之分&#xff0c;代表性的就是硬盘 VG(全称 Volume Group,卷组):AIX中最大的存储单元&#xff0c;一个卷组由一个或多个PV组成 PP(全称 Physical Partition,物理分区):将PV…

数字孪生白皮书(2019)

▲ 赛迪工业互联网首席研究员袁晓庆博士发布报告来源&#xff1a;赛迪智库以下是白皮书主要内容的PPT&#xff1a;&#xff08;点击放大观看&#xff09;123456789101112131415161718192021222324252627282930未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&…

java手动线程池使用_Java手动配置线程池过程详解

线程池中&#xff0c;常见有涉及到的&#xff1a;ExecutorService executorService Executors.newSingleThreadExecutor();ExecutorService executorService1 Executors.newCachedThreadPool();ExecutorService executorService2 Executors.newFixedThreadPool(3);关于Execu…