文件分割器

private static final int SIZE = 1024 *1024;

public static void splitFile(File file) throws IOException{

//用读取流关联文件(不确定文件格式)

FileInputStream fis = new FileInputStream(file);//源是一个

byte[] by = new byte[SIZE];//定义1M的缓冲区

FileOutputStream fos = null;//汇不知道有多少个

int len = 0;

int count = 1;//记录子文件个数

File dir = new File("D:\\patFiles");

if(!dir.isFile()){

dir.mkdirs();

}

while((len = fis.read(by))!=-1){

fos = new FileOutputStream(new File(dir,(count++)+".part"));//自己定义文件格式

fos.write(by,0,len);

}

fos.close();

fis.close();

}

文件合并

public static void main(String[] args) throws IOException {

File file = new File("D:\\PartFile");

Merge(file);

}

public static void Merge(File dir)throws IOException{

ArrayList AL = new ArrayList();

for(int i = 1;i<=7;i++){

AL.add(new FileInputStream(new File(dir,i+".part")));

}

Enumeration en = Collections.enumeration(AL);

SequenceInputStream sis = new SequenceInputStream(en);

FileOutputStream fos = new FileOutputStream(new File(dir,"盛夏光年.mp3"));

byte[] by = new byte[1024];

int len = 0;

while((len = sis.read(by))!=-1){

fos.write(by, 0, len);

}

sis.close();

fos.close();

}

文件分割合并+配置文件

import java.io.*;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Enumeration;

import java.util.Properties;

public class Main

{

private static final int SIZE = 1024 *1024;

public static void main(String[] args) throws IOException {

File file1 = new File("d:\\NeedSplit\\盛夏光年.mp3");

File file2 = new File("D:\\PartFiles");

splitFile(file1);

Merge_1(file2);

}

public static void splitFile(File file) throws IOException{

//用读取流关联文件(不确定文件格式)

FileInputStream fis = new FileInputStream(file);//源是一个

byte[] by = new byte[SIZE];//定义1M的缓冲区

FileOutputStream fos = null;//汇不知道有多少个

int len = 0;

int count = 1;//记录子文件个数

/*分割文件必需要记录分割文件的名称和分割处理的碎片文件的个数,方便合并

* 这个信息为了进行描写叙述,使用键值对的方法。所以使用Properties对象*/

Properties pro = new Properties();

File dir = new File("D:\\PartFiles");

if(!dir.isFile()){

dir.mkdirs();

}

while((len = fis.read(by))!=-1){

fos = new FileOutputStream(new File(dir,(count++)+".part"));//自己定义文件格式

fos.write(by,0,len);

fos.close();

}

//将分割后文件的信息保存在pro集合中

pro.setProperty("partCount", count+"");

pro.setProperty("fileName", file.getName());

fos = new FileOutputStream(new File(dir,count+".properties"));

//将pro集合的信息存储在集合中

pro.store(fos, "save file infmation");

fis.close();

}

public static void Merge_1(File dir)throws IOException{

//获取指定文件夹下配置文件对象

File[] files = dir.listFiles(new SuffixFilter(".properties"));//new一个过滤器

if(files.length!=1){

throw new RuntimeException(dir+"该文件夹下没有properties扩展名的文件或者不唯一 ");

}

//记录配置文件对象

File confile = files[0];

//获取配置文件信息

Properties pro = new Properties();

FileInputStream fis = new FileInputStream(confile);//关联流对象

pro.load(fis);//载入信息

String filename = pro.getProperty("fileName");//得到文件名称

int count = Integer.parseInt(pro.getProperty("partCount"));//得到碎片个数

//获取该文件夹下的全部碎片文件

//定义过滤器。推断碎片文件的个数与配置信息中的碎片信息是否一致

File[] partFiles = dir.listFiles(new SuffixFilter(".part"));

if(partFiles.length!=(count-1)){

throw new RuntimeException("碎片文件个数不正确,应是"+count+"个!");

}

//将碎片文件和流对象关联。并存储集合中

ArrayList AL = new ArrayList();

for(int i = 0;i

AL.add(new FileInputStream(partFiles[i]));

}

//将多个流合并成一个序列流

Enumeration en = Collections.enumeration(AL);

SequenceInputStream sis = new SequenceInputStream(en);

//读写过程

FileOutputStream fos = new FileOutputStream(new File(dir,filename));

byte[] by = new byte[1024];

int len = 0;

while((len = sis.read(by))!=-1){

fos.write(by, 0, len);

}

sis.close();

fos.close();

}

}

版权声明:本文博主原创文章。博客,未经同意不得转载。

java文件分割器_JAVA学习课第五 — IO流程(九)文件分割器合成器相关推荐

  1. Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  2. Spring MVC 学习总结(五)——校验与文件上传 转自 张果 博客;已经编程校验;正确无误;...

    Spring MVC 学习总结(五)--校验与文件上传 目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二 ...

  3. Slicer学习笔记(五十四)slicer分割结果3D显示

    Slicer学习笔记(五十四)slicer分割结果3D显示 1.Create a segmentation from a labelmap volume and display in 3D 2.Exp ...

  4. Slicer学习笔记(五十六)slicer分割transformNode包含的信息与使用

    Slicer学习笔记(五十六)slicer分割transformNode包含的信息与使用 1.打印transformNode信息 2.测试 2.1.变换前 2.2.变换后 3.使用坐标变换 1.打印t ...

  5. java 如何级联删除_Java学习-040-级联删除目录中的文件、目录

    之前在写应用模块,进行单元测试编码的时候,居然脑洞大开居然创建了一个 N 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到 ...

  6. java文件传输连接方式_Java 学习笔记 网络编程 使用Socket传输文件 CS模式

    Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接 ...

  7. java统计string中文数字英文_Java学习(4):统计一个文件中的英文,中文,数字,其他字符以及字符总数...

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  8. java中bpmn流程图_Java学习之BPMN知识以及Activiti的流程部署

    BPMN的介绍 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和 ...

  9. java的环境变量_java学习册|JDK|环境变量

    每一个学java的小伙伴遇到的第一个拦路虎就是配置环境变量,而且关于环境变量,已经写过了不少文章,今天,我们不炒冷饭,我们来深入探讨下 往期文章 首先还是把什么是环境变量,如何配置环境变量讲一下,参考 ...

最新文章

  1. 十年难得一遇!从数据误删到全量恢复的惊险记录
  2. 电子与通信工程专硕考分_2021西安电子科技大学电子与通信工程考研经验分享...
  3. php和python和java-python与java区别
  4. MATLAB机器学习系列-12:蚁群算法优化原理及其matlab实现
  5. Linux文本处理之printf:规定输出内容与样式 %规定内容样式 \规定排版样式
  6. 异步任务,邮箱任务,定时任务
  7. 移动端上下拖动调整顺序效果_移动端上下滑动事件之--坑爹的touch.js
  8. 浏览器地址栏传中文乱码
  9. Maven系列--maven-compiler-plugin的使用、Maven之Surefire插件
  10. 进销存excel_进销存管理系统excel模板
  11. 深度学习之torch(一)MINIST手写字符分类
  12. 便宜的前端培训班都有哪些?
  13. 使用WSS的Lists.UpdateListItems()方法之被截断的CAML
  14. python 登录新浪微博_模拟登录新浪微博(Python) - 转
  15. js中关于0.1+0.1不等于0.2 ,而console.log(0.1)是0.1,面试01
  16. hostapd配置解析
  17. 验证(Verification) 确认(Validation)鉴定( Qualification) 的区别
  18. PE文件之IMAGE_DOS_HEADER
  19. python renamer_Python sys.meta_path方法代码示例
  20. 一口气实现交通大数据爬取与Python可视化(含数据分享)

热门文章

  1. SiamMask 测试程序分析
  2. RTL8189FTV驱动交叉编译
  3. Visual Studio Community 2015 英文版下载
  4. 根据ip地址获取地理位置及坐标
  5. Linux 安装Harbor镜像仓库,最新教程,细到极致
  6. JAVA获取本地字库
  7. linux scp命令创建目录,linux – 让scp始终覆盖或创建目录
  8. Windows常用快捷键与命令
  9. 华为EPON OLT开局配置
  10. CentOS双网卡配置默认路由