Java基础--文件合并器
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基础--文件合并器相关推荐
- Java基础--文件切割器
好吧,既然算法这个高深的问题还不能游刃有余,那就先巩固巩固基础吧! 我就根据自己的学习经历,来复习一下以前学过的知识吧! 首先声明,这些概念非本人创造,是本人学习过程中接触到的.然后我根据自己的理解空 ...
- Java基础:类加载器
系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 什么是类加载器 类加载器就是用来加载类的东西!类加载器也是一个类:ClassLoader 类加载 ...
- java实现文件合并_Java实现文件分割和文件合并实例
文件切割和文件合并这个问题困扰了我有一段时间了(超过一天没做粗来). 找了好多博客,本来想转载一个来的 结果找不到了.很无奈. 只好自己贴代码上了. 当然我会尽力好好写注释的. 文件切割器: impo ...
- 文件切割器和文件合并器
一.文件切割器 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; imp ...
- 办公自动化:PDF文件合并器,用Python将多个PDF文件进行合并
相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! Python源码.问题解答学习交流群:7731621 ...
- java基础—文件的切割与合并
文件的切割与合并 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.Fil ...
- Java实现的文件切割器和文件合并器代码
一.实现文件切割功能 01. import java.io.File; 02. import java.io.FileInputStream; 03. import java.io.FileOutpu ...
- java docx文件 合并 合并成一个大docx文件
为了合并多个docx文件成一个大的docx文件,你可以使用 Apache POI 库. Apache POI 是一个开源的 Java 库,可以用于读写 Microsoft Office 文件格式.你可 ...
- Java基础--CountDownLatch--计数器锁(门闩锁)
@toc 1. CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 c ...
- Java基础--文件流创建FOS对象--重写模式追加模式
一.创建FOS对象(重写模式) FileOutputStream是文件的字节输出流,以字节为单位将数据写入文件 FileOutputStream(File File):---创建一个file对象表示的 ...
最新文章
- 量化网络训练--Towards Effective Low-bitwidth Convolutional Neural Networks
- ASP.NET编程中常用到的27个函数集
- zoj 2723 Semi-Prime
- (1) 使用supervisor提高nodejs调试效率
- 蓝桥杯 每周一练 第一周(3n+1问题)
- nodejs和Vue和Idea
- LeetCode 1561. 你可以获得的最大硬币数目
- arp病毒利用的Javascript技术
- 方向盘左右能摇动_金澳小贴士——通过方向盘,竟能看出这些汽车故障!
- Swiper.js wap app 图片滑动效果
- 【OpenCV】边缘检测
- html设置为壁纸win10,Win10让桌面壁纸自动换的设置方法(图文教程)
- 基于TQ2440的SPI驱动学习(OLED)
- 手机计算机无法使用,用数据线把手机连接电脑,电脑无法识别,怎么回事?
- WIN10 任务栏转圈 白屏问题
- walking机器人仿真教程-仿真控制
- mysql导入错误1148,将CSV导入MySQL表会返回错误#1148
- java食堂外卖系统,校园食堂外卖订餐系统
- 2020京东双十一【全民营业,瓜分十亿】自动做任务软件
- 树莓派2model B 通过蓝牙实现A2DP协议连接手机播放音乐