原文: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大文件的分割和合并的更多相关文章

  1. Linux 大文件的分割与合并

    1.分割 -- split命令 可以指定按行数分割和按字节大小分割两种模式. (1) 按行数分割 $ large_file.txt new_file_prefix 加上-d,使用数字后缀:加上--ve ...

  2. Java-使用IO流对大文件进行分割和分割后的合并

    有的时候我们想要操作的文件很大,比如:我们想要上传一个大文件,但是收到上传文件大小的限制,无法上传,这是我们可以将一个大的文件分割成若干个小文件进行操作,然后再把小文件还原成源文件.分割后的每个小文件 ...

  3. java 流操作对文件的分割和合并的实例详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代 ...

  4. Linux之文件过滤分割与合并

    文件过滤分割与合并 1.grep命令 grep(global regular expression print)全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它能使用正则表达式搜索文本, ...

  5. Java:大文件拆分工具

    java大文件拆分工具(过滤掉表头) import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

  6. python实现将大文件夹分割成多个子文件夹

    楼主用的linux,一旦数据达到几万,文件夹打开就会变卡,同时也方便同时分工协作,便于git管理,写了个将大文件夹分割成多个小文件夹的脚本 如操作文件夹:img,脚本不破坏img的数据,创建img_1 ...

  7. Java中使用IO流实现大文件的分裂与合并

    文件分割应该算一个比较实用的功能,举例子说明吧比如说:你有一个3G的文件要从一台电脑Copy到另一台电脑, 但是你的存储设备(比如SD卡)只有1G ,这个时候就可以把这个文件切割成3个1G的文件 ,分 ...

  8. java 大文件分割与组装

    不多说,直接上代码 1 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im ...

  9. Linux大文件split分割以及cat合并

    文件大小分割文件时,需要以-C参数指定分割后的文件大小: $ split -C 100M large_file.txt stxt   如上所示,我们将大文件large_file.txt按100M大小进 ...

随机推荐

  1. OpenJudge_2757:最长上升子序列

    描述一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1 ...

  2. 光线步进——RayMarching入门

    入门实现 先用RayMarching描绘一个球体,最后在进行光照计算参考:https://www.shadertoy.com/view/llt3R4 模拟摄像机射线float3 rayDirectio ...

  3. uva1610 Party Games

    细节值得注意 注意vector<string>是可以直接sort的! #include <iostream> #include <string> #include ...

  4. postman做压力测试

    压力测试 当你需要验证你的接口的抗压能力的时候,可以点击Runner,进行压力测试 注意:压力测试只能以文件夹的方式执行多个接口,不能单独执行,如果想要测试某一个接口,就创一个文件夹,这个文件夹里只有 ...

  5. python之字符串str操作方法

    str.upper() (全部大写) str.lower() (全部小写) str.startswith() (以什么开头) str.endswith() (以什么结尾) str.count() (统 ...

  6. LayuiAdmin退出模块报错解决

    将layuiAdmin/src/controller目录下的common.js中 logout方法的url中logout.js的路径修改为自己目录的路径: 我这里修改为绝对路径:

  7. 前端拖动div 效果

    /** * author levi * url http://levi.cg.am */ $(function() { $(document).mousemove(function(e) { if(! ...

  8. 去BAT,你应该要看一看的面试经验总结

    我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的. 先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器开发主程或技术经理.我本人 ...

  9. luogu 数列找不同-莫队

    https://www.luogu.org/problemnew/show/P3901 了解过莫队的人应该都清楚,莫队是一个优化的暴力,可以在相对暴力比较优的时间中,求出一段序列内的某些性质(例:数字 ...

  10. SQL练习题笔记

    查找最晚入职员工的所有信息 select * from employees order by hire_date desc limit 1 查找入职员工时间排名倒数第三的员工所有信息 select * ...