一、文件切割器

import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.Properties;

public class SplitFileDemo{
 private static final int SIZE = 1024*1024;
 public static void main(String[] args) throws IOException{
 File file = new File("0.mp3" );
 splitFile(file);
 }

public static void splitFile(File file) throws IOException {
 //用读取流关联源文件
 FileInputStream fis = new FileInputStream(file);

//定义一个1M的缓冲区

byte[] buf = new byte[SIZE];

//创建目的
 FileOutputStream fos = null;

int len = 0;
 int count = 1;

//切割文件时,必须记录住被切割文件的名称,以及切割出来碎片文件的个数,以方
便于合并。
//这个信息为了进行描述,使用键值对的方式,用到了properties对象。

Properties prop = new Properties();
 File dir = new File("c:\\partFiles" );
 if(!dir.exists())
 dir.mkdirs();
 while((len = fis.read(buf)) != -1){
 fos = new FileOutputStream(new File(dir,(count++) +
".part"));
 fos.write(buf,0,len);
 fos.close();
 }

//将被切割文件的信息保存到prop集合中
 prop.setProperty( "partcount",count + "" );
 prop.setProperty( "filename",file.getName());

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

//将prop集合中的数据存储到文件中
 prop.store(fos, "save file info");

fis.close();
 fos.close();
 }
 }

二 、文件合并器

import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.SequenceInputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Properties;

public class MergeFile{
 public static void main(String[] args) throws IOException {
 File dir = new File("c:\\partFiles" );
 mergeFile(dir);
 }

public static void mergeFile(File dir) throws IOException {

//获取指定目录下的配置文件对象
 File[] files = dir.listFiles( new SuffixFilter(".properties" ));

if(files.length!=1)
 throw new RuntimeException(dir + ",该目录下没有properties扩
展名的文件或者不唯一" );

//记录配置文件对象
 File confile = files[0];

//获取该文件中的信息
 Properties prop = new Properties();
 FileInputStream fis = new FileInputStream(confile);

prop.load(fis);

String filename = prop.getProperty( "filename");

int count = Integer.parseInt(prop.getProperty("partcount"));

//获取该目录下的所有碎片文件
 File[] partFiles = dir.listFiles( new SuffixFilter(".part" ));

if(partFiles.length != (count - 1)){
throw new RuntimeException("碎片文件不符合要求,个数不对!应该
是" + count + "个");
 }

//将碎片文件和流对象关联并存储到集合中
 ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();

for(int x = 1; x <= partFiles.length; x++){
 al.add( new FileInputStream(partFiles[x-1]));
 }

final Iterator<FileInputStream> it = al.iterator();

//将多个流合并成一个序列流
 Enumeration<FileInputStream> en = Collections.enumeration(al);

SequenceInputStream sis = new SequenceInputStream(en);

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

byte[] buf = new byte[1024*1024];
 int len = 0;
 while((len = sis.read(buf)) != -1){
 fos.write(buf,0,len);
 }

fos.close();
 sis.close();
 }
 }

class SuffixFilter implements FilenameFilter{
 private String suffix;

public SuffixFilter(String suffix){
 super();
 this.suffix = suffix;
 }

public boolean accept(File dir,String name){
return name.endsWith(suffix);
 }
 }

文件切割器和文件合并器相关推荐

  1. Java实现的文件切割器和文件合并器代码

    一.实现文件切割功能 01. import java.io.File; 02. import java.io.FileInputStream; 03. import java.io.FileOutpu ...

  2. Java基础--文件切割器

    好吧,既然算法这个高深的问题还不能游刃有余,那就先巩固巩固基础吧! 我就根据自己的学习经历,来复习一下以前学过的知识吧! 首先声明,这些概念非本人创造,是本人学习过程中接触到的.然后我根据自己的理解空 ...

  3. 文件切割器 合并器

    /*目的:设计一个可以切割文件并将文件再次合成的程序  * 切割思路:  * 1想要切割文件首先确定源文件,然后建立一个切割方法,  * 2将一个源文件切成几个文件,要借助输入输出流,,  * 3用配 ...

  4. PDF文件拆分合并器PDF Merge PDF Splitter + Mac

    PDF Merge & PDF Splitter + Mac是专为Mac用户所提供的PDF文件拆分合并器,PDF Merge & PDF Splitter + Mac版能够为您将快速多 ...

  5. 如何批量合并Excel文件和工作表 - Excel合并器使用教程

    Excel是人们用于创建日常工作表和统计信息的最流行的工具,在我们工作中经常接触到Excel的XLSX和XLS格式文件.不少朋友应该有时会发现,管理太多的Excel工作表和文件是一件头疼的事情,经常需 ...

  6. 办公自动化:PDF文件合并器,用Python将多个PDF文件进行合并

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! Python源码.问题解答学习交流群:7731621 ...

  7. Java实现文件分割和文件合并实例

    文件切割和文件合并这个问题困扰了我有一段时间了(超过一天没做粗来). 找了好多博客,本来想转载一个来的 结果找不到了.很无奈. 只好自己贴代码上了. 当然我会尽力好好写注释的. 文件切割器: impo ...

  8. java实现文件合并_Java实现文件分割和文件合并实例

    文件切割和文件合并这个问题困扰了我有一段时间了(超过一天没做粗来). 找了好多博客,本来想转载一个来的 结果找不到了.很无奈. 只好自己贴代码上了. 当然我会尽力好好写注释的. 文件切割器: impo ...

  9. ASP.NET Core 静态文件及JS包管理器(npm, Bower)的使用

    在 ASP.NET Core 中添加静态文件 虽然ASP.NET主要大都做着后端的事情,但前端的一些静态文件也是很重要的.在ASP.NET Core中要启用静态文件,需要Microsoft.AspNe ...

最新文章

  1. creo减速器建模实例_Proe/Creo建模实例教程----乌比莫斯之环教程(表达式扫描特征)...
  2. TJU 2248. Channel Design 最小树形图
  3. wcf简单的创建和运用
  4. gulp-babel 阻止了js文件编译的进程?
  5. yml php,使用 docker-compose.yml 快速搭建php开发环境
  6. Data URL和图片,及Data URI的利弊
  7. 20181225 基于TCP/IP和基于UDP/IP的套接字编程
  8. uni.startPullDownRefresh 只能执行一次的解决方案
  9. 全文搜索引擎 Elasticsearch 入门(ik,kibana,x-pack)
  10. Eclipse 使用 SVN 插件后修改用户方法汇总
  11. web前端入门:CSS 样式书写规范
  12. Linux下5种动态库运行时搜索路径的方法
  13. atitit 编程语言概念与原理
  14. combox取值以及赋值的方法
  15. 软件测试工程师--面试题
  16. E1--千兆以太网接口测试应用2022-09-07
  17. 利用python进行微信好友数据分析
  18. 全民学霸服务器在维护中需要多久,《全民学霸》学生系统详解,成就学霸之路...
  19. Android自定义Drawable第十四式之百步穿杨
  20. 加密一条保序的数据流

热门文章

  1. 数字图像处理实验课设:车辆行驶偏离车道线预警
  2. 【教程】GitBook Editor编写电子书
  3. css常用中文字体的英文名称写法
  4. 威盾php解密函数,威盾PHP加密专家解密算法 | LsevenTT博客-站群哥
  5. Anaconda prompt下载模块失败解决方案
  6. 三千字乱弹QQ和360大战【慎入】
  7. [经验]调节GPU风扇的转速
  8. Linux故障恢复技巧(转)
  9. 软件园系列报道下一站——武汉“光谷”软件园
  10. [No0000F1]js获取喜马拉雅和荔枝FM电台专辑音频