在切割文件的时候应该生成一个记录文件信息的文件,以便在以后合并文件的时候知道这个文件原来的文件名和记录文件切割完后生成了多少个切割文件

 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;//1M=1024*1024个字节 public static void main(String[] args) throws IOException {
File file = new File("F:\\jian.avi");
splitFileDemo(file); }
public static void splitFileDemo(File file) throws IOException { //用读取流关联一个文件
FileInputStream fis = new FileInputStream(file); //定义一个1M的缓冲区
byte[] buf = new byte[SIZE]; //创建目的
FileOutputStream fos = null;
int count = 1;
int len = 0;
/*
* 切割文件时,必须记录被切割文件的名称,以及切割出来碎片文件的个数,以便于合并
* 这个信息为了进行简单的描述,使用键值对的方式,用到了properties对象
* properties
* */
Properties prop = new Properties(); File dir = new File("F:\\partfiles");
if(!dir.exists()){
dir.mkdirs();
} while((len = fis.read(buf))!=-1){
fos = new FileOutputStream(new File(dir,(count++)+".part"));//扩展名可以依据软件的需求来定义,但不要是txt这些扩展名,因为切割完的文件不能直接读取
fos.write(buf,0,len);
fos.close();
}
//将被切割文件的信息保存到prop集合中
prop.setProperty("partcount", count+"");
prop.setProperty("filesname", file.getName());
fos = new FileOutputStream(new File(dir,count+".properties"));
//将prop集合中的数据存储到文件中
prop.store(fos, "save file info"); fos.close();
fis.close();
}
}

文件合并(将被切割了的文件合并回去)

  先定义一个过滤器:

import java.io.File;
import java.io.FilenameFilter; public class suffixFilter implements FilenameFilter {
private String suffix;
public suffixFilter(String suffix) {
super();
this.suffix = suffix;
}
@Override
public boolean accept(File dir, String name) {
return name.endsWith(suffix);
}
}
 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.Collections;
import java.util.Enumeration;
import java.util.Properties; public class MergeFile { public static void main(String[] args) throws IOException {
File dir = new File("F:\\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("filesname");
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 i = 0; i < partFiles.length; i++) {
al.add(new FileInputStream(partFiles[i]));
} //将多个流合并为一个序列流=================================
Enumeration<FileInputStream> en = Collections.enumeration(al); SequenceInputStream sis = new SequenceInputStream(en); FileOutputStream fos = new FileOutputStream(new File(dir,filename));
byte[] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
} sis.close();
fos.close();
} }

IO流_文件切割与合并(带配置信息)的更多相关文章

  1. IO流_文件切割与合并

    切割可以分两种方式:按文件个数切,按文件大小来切(建议用这种方式,因为按个数的话,有可能文件非常大) import java.io.File; import java.io.FileInputStre ...

  2. java IO流之文件切割两例(含Properties 用法)

    package cn.itcast.io.p1.splitfile; import java.io.File;import java.io.FileInputStream;import java.io ...

  3. java 后台通过IO流把文件传到前端并下载

    我的业务需求是两个不同的web程序放在不同的服务器上,web程序A要访问到web程序B上传上来的文件,所以用到了这一个IO读取文件的接口 JAVA代码(排版有点问题  已经尽力补救了(:3_ヽ)_) ...

  4. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  5. java io流 对文件夹的操作

    java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...

  6. java io流 创建文件、写入数据、设置输出位置

    java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...

  7. IO流----操作文件的9种方法代码实现

    IO流----操作文件的9种方法代码实现: 1:使用字节流读写数据: 四种方式: method1:          每次读写一个字节,边读边写: /* * 复制文本文件. * * 数据源:从哪里来 ...

  8. 38、使用IO流进行文件拷贝

    使用IO流进行文件拷贝 需求:在项目的根目录里面创建一个java.txt的文件,然后将这个文件拷贝到file文件夹里面并且重命名为good.txt文件先以流的方式将java.txt文件读取到内存中,然 ...

  9. Java基础教程:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

随机推荐

  1. sql server备份和还原

    官方文档:http://msdn.microsoft.com/zh-cn/library/ms187048%28v=sql.90%29.aspx

  2. 深度学习之PyTorch实战(1)——基础学习及搭建环境

    最近在学习PyTorch框架,买了一本<深度学习之PyTorch实战计算机视觉>,从学习开始,小编会整理学习笔记,并博客记录,希望自己好好学完这本书,最后能熟练应用此框架. PyTorch ...

  3. Algolia使用教程 , 超详细傻子看都会

    框架描述 发现网上Algolia这块的资料较少,就花了点时间从官网上整理了下,总结了几项常用的功能用法. 现在比较有名的Algolia提供了云搜索的服务.具体办法是我们将数据库的信息以JSON的格式上 ...

  4. MVC基础篇—控制器与视图数据的传递

    Viewdata,Viewbag,Tempdata 1  Vewdata:简单来说就是数据字典,通过键值对的形式来存放数据.举例如下: //后台控制器代码: public ActionResult V ...

  5. [PHP] 算法-请找出带环链表的环的入口结点的PHP实现

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null 1.找链表倒数第k个结点,输入一个链表,输出该链表中倒数第k个结点.第一个指针走(k-1)步,到达第k个节点,两个指针同时往后 ...

  6. 【Java每日一题】20161205

    package Dec2016; import java.util.HashSet; public class Ques1205 { public static void main(String[] ...

  7. Java高级类特性(二)

    一.static关键字 static关键字用来声明成员属于类,而不是属于类的对象.1). static (类)变量类变量可以被类的所有对象共享,以便与不共享的成员变量区分开来. static变量也称作 ...

  8. 【Dubbo&&Zookeeper】2、 windows平台dubbo-admin管理平台搭建

    一.前言 dubbo的使用,其实只需要有注册中心,消费者,提供者这三个就可以使用了,但是并不能看到有哪些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入dubbo-admin.通过dubb ...

  9. Paired t-test

    1 Continuous Dependent Variable with normal distribution 1 (2 Level) Categorical Independent Variabl ...

  10. 10折交叉验证(10-fold Cross Validation)与留一法(Leave-One-Out)、分层采样(Stratification)

    10折交叉验证 我们构建一个分类器,输入为运动员的身高.体重,输出为其从事的体育项目-体操.田径或篮球. 一旦构建了分类器,我们就可能有兴趣回答类似下述的问题: . 该分类器的精确率怎么样? . 该分 ...