一.思路:

  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_文件夹分割与合并的更多相关文章

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

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

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

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

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

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

  4. Laya 1.x 按文件夹TS代码合并

    Laya 1.x 使用TS开发时,经常会碰到代码文件太多,加载index.html时时间太长的问题.Laya编辑器貌似没有自带JS代码合并的功能.基于Laya去实现JS合并需要修改编辑器源码,合并JS ...

  5. java大文件的分割和合并

    原文:http://www.open-open.com/code/view/1441679313430 import java.io.File; import java.io.FileInputStr ...

  6. Java_文件夹拷贝

    一.思路 * 文件夹的拷贝 1.递归查找子孙级文件 2.文件复制 文件夹创建 二.代码 package com.ahd.File; import java.io.File; import java.i ...

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

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

  8. java:快速文件分割及合并

    文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...

  9. (转)java:快速文件分割及合并

    文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...

随机推荐

  1. 利用java解压,并重命名

    由于工作需要,写了一个小工具,利用java来解压文件然后对文件进行重命名 主要针对三种格式,分别是zip,rar,7z,经过我的多次实践我发现网上的类库并不能解压最新的压缩格式 对于zip格式: ma ...

  2. Django开发目录

    Django开发[第一章]:Django基础和基本使用 Django开发[第二章]:Django URLConf 进阶 Django开发[第三章]:Django View 进阶 Django开发[第四 ...

  3. OO第一次博客总结

    虽然早在开学之前就已耳闻过OO这门课的威力,也在寒假自学了一些java的语法,但在真正面对OO这样的工程训练时才发现寒假所学的那点语法简直不值一提,也深刻的感受到在这个过程中自己的提升确实很快,毕竟d ...

  4. Tmux会话的使用

    不想看废话的直接拖到下面看干货部分! 我们管理Linux服务器通常是通过ssh远程连接过去,如果在服务器上执行比较耗时的操作,比如下载安装软件.编译等等,如果需要数个小时来完成这些工作,但是又不得不关 ...

  5. .net core DI 注册 Lazy<> 类型

    当我们在 .net core (2.1) 中运行如下代码注入 Lazy<T> 变量的时候: public AccountService(Lazy<IHttpContextAccess ...

  6. package-lock.json,我们应该了解

    原谅我占2017年12月31日一个坑,后续补上

  7. str2-045漏洞事件,你想要的这里都有

    话说昨天一觉醒来,发现整个安全圈被一个名为str2-045的漏洞霸屏了,好多小伙伴已经开始了喜刷刷的艰苦奋斗过程.然而对于很多小白童鞋来讲,他们可能还是处于懵逼的状态,别急,咱们专门为你们做了一期专题 ...

  8. vi命令详解(转)

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  9. Python中parameters与argument区别

    定义(define)一个带parameters的函数: def addition(x,y): return (x+y) 这里的x,y就是parameter 调用addition(3,4) 调用(cal ...

  10. (webpack系列二)webpack打包优化探索

    虽然webpack的已经升级到了webpack4,而我们目前还在使用webpack3,但其中的优化点都大同小异,升级后同样适用. 性能优化初步原则 减小代码量 减小请求数 最大化利用浏览器缓存 这三条 ...