文档章节

切割文件和合并文件

L
 LM_Mike
发布于 2017/07/23 23:47
字数 510
阅读 11
收藏 0

一、切割文件代码如下:

public class SplitFileTest {
    public static void main(String[] args) throws IOException {
        /**
         *  需求:将一个媒体文件切割成多个碎片(每个碎片的大小为1M),并添加配置说明文件
         *  1.创建(指定)一个文件夹,用于保存切割出来的碎片
         *  2.创建源文件对象,并传入一个输入流对象
         *  3.创建一个缓冲区为1M
         *  4.创建一个输入流对象并将源文件对象传入,创建一个输出流对象引用
         *  5.每个缓冲区获取到碎片时,使用输出对应流对象写入到一个新的文件
         *  6.写相应的信息到配置文件
         */
        File partDir = new File("F:\\partsDir");
        File src = new File("F:\\周杰伦 - 简单爱.mp3");
        splitFile(src,partDir);

    }

    private static void splitFile(File src, File partDir) throws IOException {
        if(!partDir.exists()){
            partDir.mkdirs();
        }
        byte[] buf = new byte[1024*1024];
        FileInputStream fis = new FileInputStream(src);
        FileOutputStream fos = null;
        int len = 0;
        int count = 1;
        while ((len=fis.read(buf)) != -1){
            fos = new FileOutputStream(new File(partDir,"简单爱-part"+(count++)));
            fos.write(buf,0,len);
            fos.close();
        }

        String filename = src.getName();
        int partCount = count;

        fos = new FileOutputStream(new File(partDir,count+".properties"));
        //创建一个属性集。
        Properties prop = new Properties();
         //将配置信息存储到属性集中
        prop.setProperty("filename",src.getName());
        prop.setProperty("partCount",Integer.toString(partCount));

        //将属性集中的信息持久化
        prop.store(fos,"part file info");

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

二、合并文件代码如下:

public class MergeFileTest {
    public static void main(String[] args) throws IOException {
        /**
         *  需求:使用SequenceInputStream类来合并碎片文件
         *  1.创建一个list集合,来保存指定文件夹碎片流集合
         *  2.用集合工具类方法Collections.enumeration()方法将list集合转换为Enumeration
         *  3.新建一个SequenceInputStream流对象,并传入第2步的Enumeration
         *  4.创建一个输出流对象,创建缓冲区循环写第3步SequenceInputStream读取的内容
         */

        File partDir = new File("F:\\partsDir");
        List<FileInputStream> list = new ArrayList<FileInputStream>();
        for (int i=1;i<12;i++){
            FileInputStream fis = new FileInputStream(new File(partDir,"简单爱-part"+i));
            list.add(fis);
        }
        Enumeration<FileInputStream> en = Collections.enumeration(list);
        SequenceInputStream sis = new SequenceInputStream(en);

        FileOutputStream fos = new FileOutputStream(new File(partDir,"000.mp3"));

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

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

© 著作权归作者所有

共有 人打赏支持
L
粉丝 1
博文 263
码字总数 40947
作品 0
深圳
Linux - 文件的分割(split)与合并(cat)

一、关于 在Linux下,切割和合并文件可以使用split和cat命令来实现。 二、文件切割 文件切割模式分为两种:文本文件和二进制模式。 1、文本模式 文本模式只适用于文本文件,用这种模式切割后...

leonardos
07/02
0
0
【Linux相关】linux大文件分割与合并

前言 近日由于网上下载了很多图片,然后花了很长一段时间进行压缩,压缩完成后一看,128G多,由于机器在远程,本来想通过百度网盘进行备份,后来提示最大单个文件只能4G大小,无奈只能手动切...

chenriwei2
2016/02/09
0
0
swift 小文件合并

swift 中针对大文件有切割,对小文件(1MB以内)没有优化处理。我想通过合并相关小文件,优化小文件存取。 但不知道 可行性方面是否合理。求助于大家!

幻泠影
2015/10/05
167
0
文件切割命令:split

如果你有的文件太大,导致一些携带式设备无法复制的问题,可使用“split”将大文件切割成小文件 语法: split [ -bl ] file PREFIX 参数说明: -b : 后面可接欲切割成的文件大小,可加单位,...

睿睿学IT
2016/10/18
0
0
Windows 2003 系统盘扩容,增加C盘空间

最近想搞一下Android的开,可无奈于之前系统盘只有30G,装完vs和slqserver后就所剩无几了。于是便有了扩充C盘空间的想法!之前使用PM,PQ等软件,都不能搞好,还报废了一块硬盘! 故发此文章...

laoqvan
2012/06/08
0
4

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
27
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部