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大小进 ...
随机推荐
- HTML5应用 + Cordova = 平台相关的混合应用
Jerry之前的一篇文章 SAP Fiori应用的三种部署方式 曾经提到SAP Fiori应用的三种部署方式: On Premise环境下以ABAP BSP应用作为Fiori应用部署和运行的载体 部署 ...
- jq打印
1.引入jQuery.print.min.js 2.将需要打印的东西用div包起来 3. $(".printDiv").print();
- 如何理解Python中的if __name__ == '__main__'
1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...
- Java中的BIO,NIO,AIO分别是什么
BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善.BIO方式适用 ...
- NETCORE使用DB First
1)引用 (1)Install-Package Microsoft.EntityFrameworkCore (2)Install-Package Microsoft.EntityFrameworkCo ...
- tmp note
cat file.txt > /dev/null 2>&1 丢弃错误和标准输出 systemctl isolate multi-user.target 切换回多用户命令行模式 sy ...
- java 垃圾回收之标记算法
对象被判定为垃圾的标准 1.没有被其他对象引用 判定对象是否为垃圾的算法 1.引用计数算法(不是主流垃圾回收机制) 1.1 判定对象的引用数量 1.1.1 通过判断对象的引用数量来决定对象是否可以被回 ...
- Shell数值比较
Shell数值比较 比较 描述 n1 -eq n2 检查n1是否与n2相等 n1 -ge n2 检查n1是否大于或等于n2 n1 -gt n2 检查n1是否大于n2 n1 -le n2 检查n1是否小 ...
- 洛谷——P3939 数颜色(暴力vecotr+二分)
P3939 数颜色 $vecotr$里二分就是好用,全是$STL$ 颜色数目比较少,可以对每一种颜色弄一个$vector$记录一下,查找$l,r$内颜色数为$x$的兔子数,直接在$G[x]$这个$ve ...
- CentOS7.4搭建kafka单结点和集群
操作系统选择 CentOS7.4x86-64(操作系统的x86_64是跟CPU有关的,最早AMD公司开发出了一款向下兼容x86CPU,向上又扩充了指令集,具有了64位CPU的特性,这款CPU后来改名为 ...