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为单位, ...
随机推荐
- 新特技软件(Analyzer)添加新用户
新特技软件添加新用户的步骤比较多,记录下来,方便以后使用 安装完软件,处理好自己的AS以后,准备添加用户 步骤一: 我们要在安装Analyzer的服务器上添加新的Windows用户 步骤二:在Anal ...
- java基础知识-笔记整理
1.查看已安装jdk文件路径 CMD输入java -verbose. 2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...
- C#通过COM组件操作IE浏览器(二):使用IHTMLDocument3完成登录
第一章介绍了如何打开网站,这一章介绍一下使用IHTMLDocument3完成登录博客园,以下为代码: SHDocVw.InternetExplorer oBrowser = new SHDocVw.I ...
- 关于Python打开IDLE出现错误的解决办法
安装好python,打开IDLE出现以下错误: 解决办法: 修改[Python目录]\Lib\idlelib\PyShell.py文件,在1300行附近,将def main():函数下面use_sub ...
- 第50节:Java的当中的泛型
Java当中的泛型 01 import java.util.ArrayList; import java.util.List; public class Demo{ public static voi ...
- [Swift]在Swift项目中创建桥接头文件,Swift文件和Objective-C文件相互调用
创建一个Swift项目[demo],以下内容Swift文件和Objective-C文件相互调用都是在Swift项目中. 一.Swift文件调用Objective-C文件 新建文件夹[SupportFi ...
- OAuth2简易实战(四)-Github社交联合登录
1. OAuth2简易实战(四)-Github社交联合登录 1.1. 用到的第三方插件 https://github.com/spring-projects/spring-social-github ...
- 五、activiti工作流-学生请假流程
有了上一节的基础,这节主要讲如何创建一个学生请假流程.部署.运行流程实例.查看任务.执行任务.判断流程实例状态.历史任务(实例)查询.历史活动节点查询 记住,一个正在执行的流程,他的流程定义id无论到 ...
- 在Go语言中基础的Redis操作
在Go语言中基础的Redis操作 需要先安装redigo go get "github.com/garyburd/redigo/redis" Go语言Redis客户端的简单示例 连 ...
- Linux(CentOS)下安装Elasticsearch5.0.0
一.ES5.0解压安装到Windows之后(可能)需要进行的设置: 1.如果不设置,直接运行elasticsearch.bat 文件 ,会报错: 2.解决方式 调节 conf/jvm.options ...