Java_文件夹分割与合并
一.思路:
1.文件切割:
使用类RandomAccessFile ,其中方法seek可以自定义读取位置,读一段,通过字节输出流(我使用BufferedOutputStream)写一段
2.文件合并
读取多个文件写入一个文件,读取使用字节输入流(BufferedInputStream),输出使用字节输出流就可以(BufferedOutputStream)
我使用的流
RandomAccessFile raf=new RandomAccessFile (fSrc,"r");
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(this.list.get(i))));
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(new File(fileName)));
BufferedOutputStream raf=new BufferedOutputStream(new FileOutputStream(new File("D://destdir//HugeCHM.rar"),true),1024);
二.代码:
1.文件切割代码
package com.ahd.util; import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List; /***
* 文件切割
* @author Administrator
*
*/
public class FileSplit {
/***
* 定义,初始化参数
*/
private File fSrc=null;
//目标文件夹地址
private static File fDest=new File("D://destdir");
//默认是1024 切割后文件大小
private int blockSize;
//切割块数
private int blockNumber;
//源文件大小
private int size;
//存储切割后文件名称
private List<String> list; /***
* 定义构造方法
*/
private FileSplit() {
super();
list=new ArrayList<String>();
}
public FileSplit(File fSrc, File fDest) {
this(fSrc,fDest,1024);
}
public FileSplit(File fSrc, int blockSize) {
this(fSrc,fDest,blockSize);
}
public FileSplit(String strSrc, String destSrc) {
this(strSrc,destSrc,1024);
}
public FileSplit(String strSrc, String destSrc,int blockSize) {
this(new File(strSrc),new File(destSrc),blockSize);
}
public FileSplit(File fSrc, File fDest, int blockSize) {
this();
this.fSrc = fSrc;
this.fDest = fDest;
this.blockSize = blockSize;
init();
} /***
* 初始化
*/
public void init(){
//增加健壮性
if(!fSrc.exists()||fSrc==null){
return;
}
if(this.blockSize>fSrc.length()){
this.blockSize=(int) fSrc.length();
}
this.size=(int) fSrc.length();
this.blockNumber=(int) Math.ceil(size*1.0/blockSize);
initList();
}
/***
* 初始化List
*/
public void initList(){
String pathName=fSrc.getName();
for(int i=0;i<this.blockNumber;i++){
list.add(fDest.getAbsolutePath()+"/"+pathName+".part"+i);
}
} /***
* 分割split
* @throws IOException
*/
public void split() throws IOException{
long beginPos=0;
for(int i=0;i<this.blockNumber;i++){
splitDetail(i,beginPos,this.blockSize);
}
}
//详细切割步骤
private void splitDetail(int i, long beginPos, int blockSize) throws IOException {
//创建流
RandomAccessFile raf=new RandomAccessFile (fSrc,"r");
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(this.list.get(i))));
//文件操作
byte []b=new byte[1024];
int len=0;
raf.seek(beginPos);
while(-1!=(len=raf.read(b))){
if(blockSize>len){
bos.write(b, 0, len);
blockSize-=len;
}else{
bos.write(b,0,blockSize);
}
bos.flush();
}
//释放流
bos.close();
raf.close();
}
}
文件切割
2.文件合并主要代码(可以与切割代码放到一起使用)
public void fileMerge() throws IOException{
for(int i=0;i<blockNumber;i++){
MergeDetail(i,list.get(i));
}
}
private void MergeDetail(int i, String fileName) throws IOException {
// TODO Auto-generated method stub
//选择流
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(new File(fileName)));
BufferedOutputStream raf=new BufferedOutputStream(new FileOutputStream(new File("D://destdir//HugeCHM.rar"),true),1024);
//文件操作
int len=0;
byte []b=new byte[1024];
while(-1!=(len=bis.read(b))){
raf.write(b);
}
raf.close();
bis.close();
}
文件合并
Java_文件夹分割与合并的更多相关文章
- Linux之文件过滤分割与合并
文件过滤分割与合并 1.grep命令 grep(global regular expression print)全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它能使用正则表达式搜索文本, ...
- java 流操作对文件的分割和合并的实例详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代 ...
- python实现将大文件夹分割成多个子文件夹
楼主用的linux,一旦数据达到几万,文件夹打开就会变卡,同时也方便同时分工协作,便于git管理,写了个将大文件夹分割成多个小文件夹的脚本 如操作文件夹:img,脚本不破坏img的数据,创建img_1 ...
- Laya 1.x 按文件夹TS代码合并
Laya 1.x 使用TS开发时,经常会碰到代码文件太多,加载index.html时时间太长的问题.Laya编辑器貌似没有自带JS代码合并的功能.基于Laya去实现JS合并需要修改编辑器源码,合并JS ...
- java大文件的分割和合并
原文:http://www.open-open.com/code/view/1441679313430 import java.io.File; import java.io.FileInputStr ...
- Java_文件夹拷贝
一.思路 * 文件夹的拷贝 1.递归查找子孙级文件 2.文件复制 文件夹创建 二.代码 package com.ahd.File; import java.io.File; import java.i ...
- Linux 大文件的分割与合并
1.分割 -- split命令 可以指定按行数分割和按字节大小分割两种模式. (1) 按行数分割 $ large_file.txt new_file_prefix 加上-d,使用数字后缀:加上--ve ...
- java:快速文件分割及合并
文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...
- (转)java:快速文件分割及合并
文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...
随机推荐
- ActiveMQ 的安装与使用
消息中间件简介 消息中间件(MOM:Message Orient middleware) 消息中间件有很多的用途和优点: 1. 将数据从一个应用程序传送到另一个应用程序,或者从软件的一个模块传送到另外 ...
- 基于 jq 实现拖拽上传 APK 文件,js解析 APK 信息
技术栈 jquery 文件上传:jquery.fileupload,github 文档 apk 文件解析:app-info-parser,github 文档 参考:前端解析ipa.apk安装包信息 - ...
- 增删改查Spring+MyBatis
其实这次写这个增删改查,我的收获很大,在同学的帮助下和老师的推动下,我也是学会了很多的技能点. 1.显示数据 显示数据对我而言可以说很好做,因为我以前增删改查做了有N遍,但是我却每次都是无功而返,半途 ...
- GITHUB(github)初级使用
Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,Github不仅可以托管各种Git版本仓库,还拥有了更美观的Web ...
- 运行 Spring Boot 应用的 3 种方式
今天介绍 3 种运行 Spring Boot 应用的方式,看大家用过几种? 你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spring Boot 开启的 ...
- app测试之专项测试
专项测试包含很多东西,安装.升级.卸载.性能.安全.网络.随机等等,这些都属于专项测试 一个app的正常到用户手里使用,功能是最基础的测试,专项测试测试主要的. 下面介绍一些常用的专项测试: 1.多任 ...
- 深入理解JavaScript原型:prototype,__proto__和constructor
JavaScript语言的原型是前端开发者必须掌握的要点之一,但在使用原型时往往只关注了语法,其深层的原理并未理解透彻.本文结合笔者开发工作中遇到的问题详细讲解JavaScript原型的几个关键概念, ...
- 利用 ELK 搭建 Docker 容器化应用日志中心
利用 ELK 搭建 Docker 容器化应用日志中心 概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志 ...
- Storm是什么
Why use Storm? Apache Storm是一个免费的开源的分布式实时计算系统.Storm使得可靠的实时处理无边界的数据量变得很容易,就如同Hadoop做批处理那样.Storm很简单,可以 ...
- Google的java工具类Guava
前言 google开发java项目肯定也不想重复造轮子,所以肯定也有工具类,就是它了:Guava 我将举例几个实际的例子,发挥这个工具类好用的功能.更多的方法和功能,还有内部的实现可以直接参考http ...