一.思路:

  1.文件切割:

    使用类RandomAccessFile ,其中方法seek可以自定义读取位置,读一段,通过字节输出流(我使用BufferedOutputStream)写一段

  2.文件合并

    读取多个文件写入一个文件,读取使用字节输入流(BufferedInputStream),输出使用字节输出流就可以(BufferedOutputStream)

    我使用的流

  1.     RandomAccessFile raf=new RandomAccessFile (fSrc,"r");
  2.  
  3.     BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(this.list.get(i))));  
  4.  
  5.     BufferedInputStream bis=new BufferedInputStream(new FileInputStream(new File(fileName))); 
  6.  
  7.     BufferedOutputStream raf=new BufferedOutputStream(new FileOutputStream(new File("D://destdir//HugeCHM.rar"),true),1024);

二.代码:

1.文件切割代码

  

  1. package com.ahd.util;
  2.  
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.RandomAccessFile;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11.  
  12. /***
  13. * 文件切割
  14. * @author Administrator
  15. *
  16. */
  17. public class FileSplit {
  18. /***
  19. * 定义,初始化参数
  20. */
  21. private File fSrc=null;
  22. //目标文件夹地址
  23. private static File fDest=new File("D://destdir");
  24. //默认是1024 切割后文件大小
  25. private int blockSize;
  26. //切割块数
  27. private int blockNumber;
  28. //源文件大小
  29. private int size;
  30. //存储切割后文件名称
  31. private List<String> list;
  32.  
  33. /***
  34. * 定义构造方法
  35. */
  36. private FileSplit() {
  37. super();
  38. list=new ArrayList<String>();
  39. }
  40. public FileSplit(File fSrc, File fDest) {
  41. this(fSrc,fDest,1024);
  42. }
  43. public FileSplit(File fSrc, int blockSize) {
  44. this(fSrc,fDest,blockSize);
  45. }
  46. public FileSplit(String strSrc, String destSrc) {
  47. this(strSrc,destSrc,1024);
  48. }
  49. public FileSplit(String strSrc, String destSrc,int blockSize) {
  50. this(new File(strSrc),new File(destSrc),blockSize);
  51. }
  52. public FileSplit(File fSrc, File fDest, int blockSize) {
  53. this();
  54. this.fSrc = fSrc;
  55. this.fDest = fDest;
  56. this.blockSize = blockSize;
  57. init();
  58. }
  59.  
  60. /***
  61. * 初始化
  62. */
  63. public void init(){
  64. //增加健壮性
  65. if(!fSrc.exists()||fSrc==null){
  66. return;
  67. }
  68. if(this.blockSize>fSrc.length()){
  69. this.blockSize=(int) fSrc.length();
  70. }
  71. this.size=(int) fSrc.length();
  72. this.blockNumber=(int) Math.ceil(size*1.0/blockSize);
  73. initList();
  74. }
  75. /***
  76. * 初始化List
  77. */
  78. public void initList(){
  79. String pathName=fSrc.getName();
  80. for(int i=0;i<this.blockNumber;i++){
  81. list.add(fDest.getAbsolutePath()+"/"+pathName+".part"+i);
  82. }
  83. }
  84.  
  85. /***
  86. * 分割split
  87. * @throws IOException
  88. */
  89. public void split() throws IOException{
  90. long beginPos=0;
  91. for(int i=0;i<this.blockNumber;i++){
  92. splitDetail(i,beginPos,this.blockSize);
  93. }
  94. }
  95. //详细切割步骤
  96. private void splitDetail(int i, long beginPos, int blockSize) throws IOException {
  97. //创建流
  98. RandomAccessFile raf=new RandomAccessFile (fSrc,"r");
  99. BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(this.list.get(i))));
  100. //文件操作
  101. byte []b=new byte[1024];
  102. int len=0;
  103. raf.seek(beginPos);
  104. while(-1!=(len=raf.read(b))){
  105. if(blockSize>len){
  106. bos.write(b, 0, len);
  107. blockSize-=len;
  108. }else{
  109. bos.write(b,0,blockSize);
  110. }
  111. bos.flush();
  112. }
  113. //释放流
  114. bos.close();
  115. raf.close();
  116. }
  117. }

文件切割

  2.文件合并主要代码(可以与切割代码放到一起使用)

  

  1. public void fileMerge() throws IOException{
  2. for(int i=0;i<blockNumber;i++){
  3. MergeDetail(i,list.get(i));
  4. }
  5. }
  6. private void MergeDetail(int i, String fileName) throws IOException {
  7. // TODO Auto-generated method stub
  8. //选择流
  9. BufferedInputStream bis=new BufferedInputStream(new FileInputStream(new File(fileName)));
  10. BufferedOutputStream raf=new BufferedOutputStream(new FileOutputStream(new File("D://destdir//HugeCHM.rar"),true),1024);
  11.  
  12. //文件操作
  13. int len=0;
  14. byte []b=new byte[1024];
  15. while(-1!=(len=bis.read(b))){
  16. raf.write(b);
  17. }
  18. raf.close();
  19. bis.close();
  20. }

文件合并

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. Node.js的安装以及npm的基础使用

    索引: Node.js的安装以及Node.js的模块管理Node.js开发环境搭建以及对ES6的支持Node.js构建Vue.js项目Vue.js单文件组件的开发基于Vue.js的UI组件(Eleme ...

  2. Postman+Newman+jenkins实现API自动化测试

    最近自己在学习用postman+newman+jenkins实现API自动化测试,这里做个回顾和记录.(此次是在windows上进行的环境搭建) 一.说明 1.大致思路:利用postman做接口调试所 ...

  3. vs链接错误解决方法

    常见引起链接错误的主要原因是由于项目不能找到所需的动态库的路径: 这里介绍一下引用第三方动态库的配置方法: 方法一: vs加载动态库需要先把动态库拷贝到exe所在文件夹,再修改项目属性: 链接器-&g ...

  4. Java常见开发规范

    1 背景概述 作为程序员大军中的一员,笔者工作于沈阳数通畅联软件技术有限公司.在任职工作的第一天就听领导强调开发规范的重要性,但是笔者心里还想为什么开发规范是最重要的,难道是不应该是实现功能就万事大吉 ...

  5. Android使用ViewPager+PhotoView实现图片查看器

    可实现功能效果说明: 可实现多张图片点击放大,手指控制,左右滑动,多张图片点击任意位置定位显示任意位置图片:无动画,可自己加 效果图:                             核心代码 ...

  6. Python编程练习:使用 turtle 库完成玫瑰花的绘制

    绘制效果: 源代码: import turtle # 设置初始位置 turtle.penup() turtle.left(90) turtle.fd(200) turtle.pendown() tur ...

  7. 【渗透攻防Web篇】SQL注入攻击高级

    前言 前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御.有攻必有防,当然还要来探讨一下SQL注入防御技巧. 目录 第五节 避开过滤方法总结 ...

  8. Drools规则引擎入门指南(二)

    本篇博客主要讲解Drools常用的属性以及函数 属性 首先我们在resources\rules文件夹下创建一个Property.drl,还有一个DroolsApplicationPropertyTes ...

  9. Mybatis优缺点

    优点:SQL写在XML中,便于统一管理和优化 提供映射标签,支持对象和数据库的orm字段关系映射 可以对SQL进行优化      缺点: SQL工作量大 mybagtis移植姓不好 不支持级联

  10. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...