java文件分割器_JAVA学习课第五 — IO流程(九)文件分割器合成器
文件分割器
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流程(九)文件分割器合成器相关推荐
- Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- Spring MVC 学习总结(五)——校验与文件上传 转自 张果 博客;已经编程校验;正确无误;...
Spring MVC 学习总结(五)--校验与文件上传 目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二 ...
- Slicer学习笔记(五十四)slicer分割结果3D显示
Slicer学习笔记(五十四)slicer分割结果3D显示 1.Create a segmentation from a labelmap volume and display in 3D 2.Exp ...
- Slicer学习笔记(五十六)slicer分割transformNode包含的信息与使用
Slicer学习笔记(五十六)slicer分割transformNode包含的信息与使用 1.打印transformNode信息 2.测试 2.1.变换前 2.2.变换后 3.使用坐标变换 1.打印t ...
- java 如何级联删除_Java学习-040-级联删除目录中的文件、目录
之前在写应用模块,进行单元测试编码的时候,居然脑洞大开居然创建了一个 N 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到 ...
- java文件传输连接方式_Java 学习笔记 网络编程 使用Socket传输文件 CS模式
Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接 ...
- java统计string中文数字英文_Java学习(4):统计一个文件中的英文,中文,数字,其他字符以及字符总数...
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
- java中bpmn流程图_Java学习之BPMN知识以及Activiti的流程部署
BPMN的介绍 Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和 ...
- java的环境变量_java学习册|JDK|环境变量
每一个学java的小伙伴遇到的第一个拦路虎就是配置环境变量,而且关于环境变量,已经写过了不少文章,今天,我们不炒冷饭,我们来深入探讨下 往期文章 首先还是把什么是环境变量,如何配置环境变量讲一下,参考 ...
最新文章
- 十年难得一遇!从数据误删到全量恢复的惊险记录
- 电子与通信工程专硕考分_2021西安电子科技大学电子与通信工程考研经验分享...
- php和python和java-python与java区别
- MATLAB机器学习系列-12:蚁群算法优化原理及其matlab实现
- Linux文本处理之printf:规定输出内容与样式 %规定内容样式 \规定排版样式
- 异步任务,邮箱任务,定时任务
- 移动端上下拖动调整顺序效果_移动端上下滑动事件之--坑爹的touch.js
- 浏览器地址栏传中文乱码
- Maven系列--maven-compiler-plugin的使用、Maven之Surefire插件
- 进销存excel_进销存管理系统excel模板
- 深度学习之torch(一)MINIST手写字符分类
- 便宜的前端培训班都有哪些?
- 使用WSS的Lists.UpdateListItems()方法之被截断的CAML
- python 登录新浪微博_模拟登录新浪微博(Python) - 转
- js中关于0.1+0.1不等于0.2 ,而console.log(0.1)是0.1,面试01
- hostapd配置解析
- 验证(Verification) 确认(Validation)鉴定( Qualification) 的区别
- PE文件之IMAGE_DOS_HEADER
- python renamer_Python sys.meta_path方法代码示例
- 一口气实现交通大数据爬取与Python可视化(含数据分享)