package cn.stat.p1.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
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 qiefiledemo { private static int SIZE=1024*1024;
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException { //文件切割
File file=new File("D:\\3.avi");
splitFile(file); //文件组合
File file2=new File("D:\\cc");
mergeFile(file2); }
//文件组合
public static void mergeFile(File dir) throws IOException
{
//读取配置文件
File[] files =dir.listFiles(new sufFilter(".properties")); //判断文件是否存在
if(files.length!=1)
throw new RuntimeException("文件不存在"); //创建文件流
File fl=files[0];
//获取文件信息
Properties prot=new Properties();
FileInputStream fis=new FileInputStream(fl);
prot.load(fis); String filename=prot.getProperty("filename");
int count=Integer.parseInt(prot.getProperty("patconut")); //获取目录下所有的碎片文件
File[] patfile=dir.listFiles(new sufFilter(".pat")); if(patfile.length!=count)
{
throw new RuntimeException("数目不对");
} ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
for(int i=0;i<patfile.length;i++)
{
al.add(new FileInputStream(new File(dir,i+".pat")));
} Enumeration<FileInputStream> en=Collections.enumeration(al);
SequenceInputStream sis=new SequenceInputStream(en);
FileOutputStream fos=new FileOutputStream(new File(dir,filename));
byte[] buf=new byte[SIZE];
int len=0;
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close(); } //文件切割
public static void splitFile(File file) throws IOException
{
//用于读取流的关联文件
FileInputStream fis=new FileInputStream(file);
//定义一个1M的缓冲区
byte[] buf=new byte[SIZE]; //创建目地
FileOutputStream fos=null; //创建文件切割配置文件信息
Properties prop=new Properties(); int conut=0;
int len=0; File dir=new File("D:\\cc");
if(!dir.exists())
{
dir.mkdir();
} while((len=fis.read(buf))!=-1)
{
fos=new FileOutputStream(new File(dir,(conut++)+".pat"));
fos.write(buf,0,len);
} //创建配置文件
fos=new FileOutputStream(new File(dir,conut+".properties"));
prop.setProperty("patconut",conut+"");
prop.setProperty("filename",file.getName());
prop.store(fos,""); fos.close();
fis.close(); } }
package cn.stat.p1.file;

import java.io.File;
import java.io.FilenameFilter; public class sufFilter implements FilenameFilter { private String suffix; @Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return name.endsWith(suffix);
} public sufFilter(String suffix) {
super();
this.suffix = suffix;
} }

java下io文件切割合并功能加配置文件的更多相关文章

  1. java下io文件切割合并功能

    package cn.stat.p1.file; import java.io.File; import java.io.FileInputStream; import java.io.FileNot ...

  2. Ajax+Java实现大文件切割上传

    技术体系:html5(formdata) + java + servlet3.0+maven + tomcat7 <!DOCTYPE html> <html> <head ...

  3. Ubuntu根目录下各文件夹的功能详细介绍

    Ubuntu的根目录下存在着很多的文件夹,但你知道他们都存放着哪些文件呢?这些是深入了解Ubuntu系统必不缺少的知识,本文就关于此做一下介绍吧. /bin/    用以存储二进制可执行命令文件. / ...

  4. Java基础IO文件拷贝练习题

    /** * 编写一个程序,把指定目录下的所有的带.java文件都拷贝到另一个目录中,拷贝成功后,把后缀名是.java的改成.txt. */ 1.我们看到这个题还是用大化小的思想来做 分析:1.拷贝 & ...

  5. jni 文件切割合并

    最近学习c++,看到很多常用的例子,比如文件切割,切割后后缀可以自定义,别人就无法从表面的一个文件看出是什么,也无法查看到原文件信息,只有合并后才能识别这庐山真面目 实现也比较粗暴,首先在应用层定义好 ...

  6. IO流--切割 合并文件

    import java.io.*; import java.util.*; public class io { public static void main(String[] args)throws ...

  7. Linux下的文件切割和文件合并

    linux下文件分割可以通过split命令来实现,可以指定按行数分割和按大小分割两种模式.Linux下文件合并可以通过cat命令来实现. 在Linux下用split进行文件分割: ①:指定分割后文件行 ...

  8. JAVA之IO文件读写

    IO概述:                                                          IO(Input output)流 作用:IO流用来处理设备之间的数据传输 ...

  9. Java多线程遍历文件夹,广度遍历加多线程加深度遍历结合

    复习IO操作,突然想写一个小工具,统计一下电脑里面的Java代码量还有注释率,最开始随手写了一个递归算法,遍历文件夹,比较简单,而且代码层次清晰,相对易于理解,代码如下:(完整代码贴在最后面,前面是功 ...

随机推荐

  1. 带格式导出数据到Excel

    导出按钮事件 protected void Button1_Click(object sender, EventArgs e)    {        Response.Clear();        ...

  2. Sencha Architect 激活方法

     Sencha Architect 2是ExtJS和Sencha Touch的官方可视化IDE工具.最新版本是2.2,说是破解,其实是修改License来实现无限试用而已. 1.先下载安装官方软件,大 ...

  3. express4.x中的链式路由句柄

    var express = require("express"); var router = express(); router.get('/', function (req, r ...

  4. nodejs定时任务node-schedule

    1:使用npm安装node-schedule模块 npm install node-schedule (1)每隔5分钟执行一次: var schedule = require('node-schedu ...

  5. c++四则运算代码

    //Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--& ...

  6. SQLiteDatabase中的事务

    beginTransaction():开始事务endTransaction():结束事务SQLiteDatabase还提供了如下方法来判断当前上下文是否处于事物环境中.inTransaction(): ...

  7. Gridview中修改某列的背景色

    Gridview中状态列的值是1,某列的背景是是绿色状态字段是:archivesStatus protected void gvInfo_RowDataBound(object sender, Gri ...

  8. Android Activity整体管理和关闭工具类封装

    如何彻底退出程序,在任意位置退出程序,如何管理当前的运行栈,知道activity的堆栈结构等,本文封装了一个Activity管理类,可以方便随时退出程序. /** * 应用程序Activity管理类: ...

  9. PERL DBI 自动重连问题

    [root@wx03 mojo]# cat relink.pl use Mojolicious::Lite; use JSON qw/encode_json decode_json/; use Enc ...

  10. iOS 操作系统架构

    Mac OS 和 iOS 操作系统架构 做iOS开发已经半年多了,但是感觉对iOS开发的理解却还只停留在表面,昨天刚把两个项目结了,今天打算学了一下iOS系统的架构,以便于更好的理解和开发. 首先看一 ...