java大文件的分割和合并
原文:http://www.open-open.com/code/view/1441679313430
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import java.util.Properties; /**
* SplitFile.java
* @author:<a href="mailto:bylv@isoftstone.com">bylv</a>
* @DATE:2015-9-7 上午09:27:43
* Copyright (C) 2011 ISoftStone
*/ /**
* 功能说明:
*
* @author: <a href="mailto:bylv@isoftstone.com">bylv</a>
* @DATE:2015-9-7 @TIME: 上午09:27:43
*/
public class SplitFile { private static final int SIZE = 1024 * 1024;// 定义单个文件的大小这里采用1m /**
* 功能说明:
*
* @param args
* @author: <a href="mailto:bylv@isoftstone.com">bylv</a>
* @throws Exception
* @DATE:2015-9-7 @TIME: 上午09:27:44
*/
public static void main(String[] args) throws Exception {
// 拆分
// File file = new File("D:/无标题.bmp");
// splitFile(file);
// 合并
File file = new File("C:/parfiles");
mergeFile(file);
} /**
* 功能说明:合并文件
*
* @param file
* @author: <a href="mailto:bylv@isoftstone.com">bylv</a>
* @throws Exception
* @throws FileNotFoundException
* @DATE:2015-9-7 @TIME: 上午09:47:31
*/
private static void mergeFile(File dir) throws Exception {
// 读取properties文件的拆分信息
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".properties");
}
});
File file = files[0];
// 获取该文件的信息
Properties pro = new Properties();
FileInputStream fis = new FileInputStream(file);
pro.load(fis);
String fileName = pro.getProperty("fileName");
int splitCount = Integer.valueOf(pro.getProperty("partCount"));
if (files.length != 1) {
throw new Exception(dir + ",该目录下没有解析的properties文件或不唯一");
} // 获取该目录下所有的碎片文件
File[] partFiles = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".part");
}
});
// 将碎片文件存入到集合中
List<FileInputStream> al = new ArrayList<FileInputStream>();
for (int i = 0; i < splitCount; i++) {
try {
al.add(new FileInputStream(partFiles[i]));
} catch (Exception e) {
// 异常
e.printStackTrace();
}
}
try {
// 构建文件流集合
Enumeration<FileInputStream> en = Collections.enumeration(al);
// 将多个流合成序列流
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream(new File(dir, fileName));
byte[] b = new byte[1024];
int len = 0;
while ((len = sis.read(b)) != -1) {
fos.write(b, 0, len);
}
fos.close();
sis.close();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 功能说明:拆分文件
*
* @param file
* @author: <a href="mailto:bylv@isoftstone.com">bylv</a>
* @DATE:2015-9-7 @TIME: 上午09:28:58
*/
private static void splitFile(File file) {
try {
FileInputStream fs = new FileInputStream(file);
// 定义缓冲区
byte[] b = new byte[SIZE];
FileOutputStream fo = null;
int len = 0;
int count = 0; /**
* 切割文件时,记录 切割文件的名称和切割的子文件个数以方便合并
* 这个信息为了简单描述,使用键值对的方式,用到了properties对象
*/
Properties pro = new Properties();
// 定义输出的文件夹路径
File dir = new File("C:/parfiles");
// 判断文件夹是否存在,不存在则创建
if (!dir.exists()) {
dir.mkdirs();
}
// 切割文件
while ((len = fs.read(b)) != -1) {
fo = new FileOutputStream(new File(dir, (count++) + ".part"));
fo.write(b, 0, len);
fo.close();
}
// 将被切割的文件信息保存到properties中
pro.setProperty("partCount", count + "");
pro.setProperty("fileName", file.getName());
fo = new FileOutputStream(new File(dir, (count++) + ".properties"));
// 写入properties文件
pro.store(fo, "save file info");
fo.close();
fs.close();
} catch (Exception e) {
e.printStackTrace();
} } }
java大文件的分割和合并的更多相关文章
- Linux 大文件的分割与合并
1.分割 -- split命令 可以指定按行数分割和按字节大小分割两种模式. (1) 按行数分割 $ large_file.txt new_file_prefix 加上-d,使用数字后缀:加上--ve ...
- Java-使用IO流对大文件进行分割和分割后的合并
有的时候我们想要操作的文件很大,比如:我们想要上传一个大文件,但是收到上传文件大小的限制,无法上传,这是我们可以将一个大的文件分割成若干个小文件进行操作,然后再把小文件还原成源文件.分割后的每个小文件 ...
- java 流操作对文件的分割和合并的实例详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代 ...
- Linux之文件过滤分割与合并
文件过滤分割与合并 1.grep命令 grep(global regular expression print)全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它能使用正则表达式搜索文本, ...
- Java:大文件拆分工具
java大文件拆分工具(过滤掉表头) import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...
- python实现将大文件夹分割成多个子文件夹
楼主用的linux,一旦数据达到几万,文件夹打开就会变卡,同时也方便同时分工协作,便于git管理,写了个将大文件夹分割成多个小文件夹的脚本 如操作文件夹:img,脚本不破坏img的数据,创建img_1 ...
- Java中使用IO流实现大文件的分裂与合并
文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时候就可以把这个文件切割成3个1G的文件 ,分 ...
- java 大文件分割与组装
不多说,直接上代码 1 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im ...
- Linux大文件split分割以及cat合并
文件大小分割文件时,需要以-C参数指定分割后的文件大小: $ split -C 100M large_file.txt stxt 如上所示,我们将大文件large_file.txt按100M大小进 ...
随机推荐
- 腾讯AI开放平台的接口调用指南
最近无意发现腾讯AI开放平台上提供了大量好玩的人工智能云服务,而且是完全免费的.只需要用QQ号登录即可.这么好的东西,作为一个程序员,当然要试试了! 从上图可以看出腾讯AI开放平台提供的人工智能服务主 ...
- Android(java)学习笔记166:上下文的区分
1.两种上下文: (1)Activity.this 界面的上下文 (2)getApplicationContext() 整 ...
- Unity3D 在自定义脚本中实现Button组件上的OnClick面板
下述内容不对c#语法做过多讲解,仅对已入门并有兴趣的同学做为学习和拓展的资料 大家在Unity制作的过程中一定都使用过UI功能,那么很多人也一定见过这个面板: 那么我们如何能在自己的脚本中添加上像On ...
- hard fault 学习记录
使用 segger 的 hard fault 的源文件后,当调试时,发生硬件错误的时候,可以查看 HardFaultRegs 中的内容,并对比 segger_HardFaultHandler.c 中的 ...
- Android开发案例 - 淘宝商品详情【转】
http://erehmi.cnblogs.com/ 所有电商APP的商品详情页面几乎都是和淘宝的一模一样(见下图): 采用上下分页的模式 商品基本参数 & 选购参数在上页展示 商品图文详情等 ...
- gcc编译问题
gcc avl.o hash.o list.o rb.o example.o -o 123.exe 多个.o输出 exe -c和-o都是gcc编译器的可选参数.-c表示只编译(compile)源文件但 ...
- Manjaro/Arch linux 安装输入法
输入命令: sudo pacman -Syu fcitx fcitx-googlepinyin fcitx-im fcitx-configtool 编辑 ~/.xprofile:# xfcitxexp ...
- 转: 使用 /sys 文件系统访问 Linux 内核
转一个挺不错的文章 使用 /sys 文件系统访问 Linux 内核 https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/ 如果你正在开发的设备 ...
- Chrome浏览器 v68.0.3440.106 正式版怎么样?
谷歌浏览器Google Chrome稳定版迎来v68正式版第三个维护版本发布,详细版本号为v68.0.3440.106,上一个正式版v68.0.3440.84发布于8月1日,时隔8天Google又发布 ...
- 基于flask的网页聊天室(四)
基于flask的网页聊天室(四) 前言 接前天的内容,今天完成了消息的处理 具体内容 上次使用了flask_login做用户登录,但是直接访问login_requare装饰的函数会报401错误,这里可 ...