一.思路:

  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. 新特技软件(Analyzer)添加新用户

    新特技软件添加新用户的步骤比较多,记录下来,方便以后使用 安装完软件,处理好自己的AS以后,准备添加用户 步骤一: 我们要在安装Analyzer的服务器上添加新的Windows用户 步骤二:在Anal ...

  2. java基础知识-笔记整理

    1.查看已安装jdk文件路径 CMD输入java -verbose.   2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...

  3. C#通过COM组件操作IE浏览器(二):使用IHTMLDocument3完成登录

    第一章介绍了如何打开网站,这一章介绍一下使用IHTMLDocument3完成登录博客园,以下为代码: SHDocVw.InternetExplorer oBrowser = new SHDocVw.I ...

  4. 关于Python打开IDLE出现错误的解决办法

    安装好python,打开IDLE出现以下错误: 解决办法: 修改[Python目录]\Lib\idlelib\PyShell.py文件,在1300行附近,将def main():函数下面use_sub ...

  5. 第50节:Java的当中的泛型

    Java当中的泛型 01 import java.util.ArrayList; import java.util.List; public class Demo{ public static voi ...

  6. [Swift]在Swift项目中创建桥接头文件,Swift文件和Objective-C文件相互调用

    创建一个Swift项目[demo],以下内容Swift文件和Objective-C文件相互调用都是在Swift项目中. 一.Swift文件调用Objective-C文件 新建文件夹[SupportFi ...

  7. OAuth2简易实战(四)-Github社交联合登录

    1. OAuth2简易实战(四)-Github社交联合登录 1.1. 用到的第三方插件 https://github.com/spring-projects/spring-social-github ...

  8. 五、activiti工作流-学生请假流程

    有了上一节的基础,这节主要讲如何创建一个学生请假流程.部署.运行流程实例.查看任务.执行任务.判断流程实例状态.历史任务(实例)查询.历史活动节点查询 记住,一个正在执行的流程,他的流程定义id无论到 ...

  9. 在Go语言中基础的Redis操作

    在Go语言中基础的Redis操作 需要先安装redigo go get "github.com/garyburd/redigo/redis" Go语言Redis客户端的简单示例 连 ...

  10. Linux(CentOS)下安装Elasticsearch5.0.0

    一.ES5.0解压安装到Windows之后(可能)需要进行的设置: 1.如果不设置,直接运行elasticsearch.bat 文件 ,会报错: 2.解决方式 调节 conf/jvm.options ...