Ok,今天写个文件合并器。依然是Java IO 的应用。

文件合并器就是把切碎后的文件恢复成原来的样子。基本思路就是把碎片文件流放到一个合并流中,然后再写到另外一个流中即可。Java IO 里有一个SequenceInputStream这样的对象。

它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。---Java文档

原文件的有关信息可以从properties 文件中读取。在读取过程中涉及到一个文件过滤器的概念,就是只选择后缀名为.part的文件。Java里面有一个FilenameFilter这样的接口。我们可以实现这个接口的accept方法来实现自己的过滤规则.
知道了这些,实现起来就比较简单了。具体过程我们看源码:

/**Mar 28, 2013*Copyright(c)JackWang*All rights reserve*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
package com.myjava.function;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Properties;import com.myjava.filter.suffixFilter;
import com.myjava.myexception.DataErrorException;
import com.myjava.myexception.NoSuchFileException;/*** 需求:合并文件* 思路:用SequenceInputStrem将切割的文件流合并为一个存储起来* 文件的相关信息从propreties文件中读取* @author WangCheng**/
public class MergeFile {/*** @param args* @throws IOException */public static void main(String[] args) throws IOException {File dir = new File("I:"+File.separator+"PartFiles");  //切割文件绝对路径boolean result = mergeFile(dir);System.out.println(result);}public static boolean mergeFile(File dir) throws IOException {//参数合法性检查if(!dir.exists()){throw new NoSuchFileException("文件夹不存在!!!");}File[] files = dir.listFiles(new suffixFilter(".part")); //得到碎片文件对象File[] propFiles = dir.listFiles(new suffixFilter(".properties")); //得到配置文件Properties prop = null;prop = getPropertiesValue(dir,propFiles[0].getName());if (propFiles.length != 1) {throw new DataErrorException("配置文件有错误!");}if (files.length != Integer.parseInt(prop.getProperty("count"))) {throw new DataErrorException("碎片文件不完整!");}//     for (File file : files) {
//          System.out.println(file.getName());
//      }Collection<FileInputStream> list = new ArrayList<FileInputStream>();for (File file : files) {list.add(new FileInputStream(file));}Enumeration<FileInputStream> en = Collections.enumeration(list);//合并流SequenceInputStream sis = new SequenceInputStream(en);FileOutputStream fos = new FileOutputStream(new File(dir,prop.getProperty("fileName")));int len = 0;byte[] buff = new byte[1024*1024];while((len = sis.read(buff))!=-1){fos.write(buff,0,len);}sis.close();fos.close();return true;}public static Properties getPropertiesValue(File dir,String name) throws IOException {Properties prop = new Properties();FileInputStream fis = new FileInputStream(new File(dir,name));prop.load(fis);return prop;}}

文件过滤器的实现:

/***Mar 28, 2013*Copyright(c)JackWang*All rights reserve*@Author <a href="mailto:wangchengjack@163.com">JackWang</a>
*/
package com.myjava.filter;import java.io.File;
import java.io.FilenameFilter;public class suffixFilter implements FilenameFilter {private String suffix;public String getSuffix() {return suffix;}/*** @param suffix*/public suffixFilter(String suffix) {super();this.suffix = suffix;}@Overridepublic boolean accept(File dir, String name) {// TODO Auto-generated method stubreturn name.endsWith(this.getSuffix());}}

到此,文件合并器就完成了。

Java基础--文件合并器相关推荐

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

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

  2. Java基础:类加载器

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 什么是类加载器 类加载器就是用来加载类的东西!类加载器也是一个类:ClassLoader 类加载 ...

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

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

  4. 文件切割器和文件合并器

    一.文件切割器 import java.io.File;  import java.io.FileInputStream;  import java.io.FileOutputStream;  imp ...

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

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

  6. java基础—文件的切割与合并

    文件的切割与合并 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.Fil ...

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

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

  8. java docx文件 合并 合并成一个大docx文件

    为了合并多个docx文件成一个大的docx文件,你可以使用 Apache POI 库. Apache POI 是一个开源的 Java 库,可以用于读写 Microsoft Office 文件格式.你可 ...

  9. Java基础--CountDownLatch--计数器锁(门闩锁)

    @toc 1. CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 c ...

  10. Java基础--文件流创建FOS对象--重写模式追加模式

    一.创建FOS对象(重写模式) FileOutputStream是文件的字节输出流,以字节为单位将数据写入文件 FileOutputStream(File File):---创建一个file对象表示的 ...

最新文章

  1. 量化网络训练--Towards Effective Low-bitwidth Convolutional Neural Networks
  2. ASP.NET编程中常用到的27个函数集
  3. zoj 2723 Semi-Prime
  4. (1) 使用supervisor提高nodejs调试效率
  5. 蓝桥杯 每周一练 第一周(3n+1问题)
  6. nodejs和Vue和Idea
  7. LeetCode 1561. 你可以获得的最大硬币数目
  8. arp病毒利用的Javascript技术
  9. 方向盘左右能摇动_金澳小贴士——通过方向盘,竟能看出这些汽车故障!
  10. Swiper.js wap app 图片滑动效果
  11. 【OpenCV】边缘检测
  12. html设置为壁纸win10,Win10让桌面壁纸自动换的设置方法(图文教程)
  13. 基于TQ2440的SPI驱动学习(OLED)
  14. 手机计算机无法使用,用数据线把手机连接电脑,电脑无法识别,怎么回事?
  15. WIN10 任务栏转圈 白屏问题
  16. walking机器人仿真教程-仿真控制
  17. mysql导入错误1148,将CSV导入MySQL表会返回错误#1148
  18. java食堂外卖系统,校园食堂外卖订餐系统
  19. 2020京东双十一【全民营业,瓜分十亿】自动做任务软件
  20. 树莓派2model B 通过蓝牙实现A2DP协议连接手机播放音乐

热门文章

  1. html旋转3d魔方制作方法,JavaScript实现的3D旋转魔方动画效果实例代码
  2. 【2020年】Android开发学习思考及规划
  3. Oracle数据库安装及配置(一)
  4. Windows javaw进程占用cpu资源100% 导致电脑卡顿
  5. MCGS洗衣机模拟仿真 组态王洗衣机模拟仿真
  6. python能干什么知乎-python能做什么知乎
  7. 如何测试聊天机器人的 10 个最佳实践
  8. k中心点聚类算法伪代码_数据分析之二分K均值聚类算法
  9. 网站全国公安机关互联网站安全服务平台备案流程
  10. C++ pthread库