java流操作对文件的分割和合并
2015-11-28 17:58
671 查看
学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并。
下面是代码:
下面是代码:
<span style="font-size:14px;">package com.dufy.file; 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.List; /** * 文件的切割和合并 * 1.要切割和合并文件:主要考虑的就是文件的源地址,目标地址,暂存文件地址和文件名称 * 2.切割文件:判断给的暂存地址是否存在,不存在,则创建;从源地址中读出文件,按照给定的大小进行文件的切割操作放入暂存地址中 * 3.合并文件:判断给定的目标地址是否存在,不存在,则创建;定义List集合将暂存地址中的文件全部读取出来,放到list集合中 * 然后使用Enumeration列举出所有文件,合并流合并文件 * 最后写入到目标的地址中 * 注:本例子中所有的异常都采用抛出的方式处理 * @author aflyun * */ public class TestFileCutUnion { public static void main(String[] args) throws IOException { String fSrc = "D:/1.jpg";//源文件的目录 String fDir = "D:/1";//目标文件的目录 String fTemp = "D:/2";//暂存文件的目录 File srcFile = new File(fSrc); File dirFile = new File(fDir); File tempFile = new File(fTemp); String fileName = srcFile.getName();//获取文件的名称 cutFile(srcFile,tempFile);//调用分割方法 unionFile(dirFile,tempFile,fileName);//调用合并方法 } /** * 切割文件 * @param srcFile * @param tempFile * @throws IOException */ public static void cutFile(File srcFile, File tempFile) throws IOException { //读取源地址文件 FileInputStream fis = new FileInputStream(srcFile); FileOutputStream fos = null; //是否为文件,不是就创建 if(!tempFile.isFile()){ tempFile.mkdirs(); } byte[] b = new byte[100]; int len =0; int count = 0; while((len=fis.read(b)) != -1){ int num = count++; //写入暂存地址目录中 fos = new FileOutputStream(new File(tempFile, num+".part")); fos.write(b, 0, len); } fos.flush(); fos.close(); fis.close(); System.out.println("分割完成!"); } /** * 合并文件 * @param dirFile * @param tempFile * @param fileName * @throws IOException */ public static void unionFile(File dirFile, File tempFile, String fileName) throws IOException { //判断目标地址是否存在,不存在则创建 if(!dirFile.isFile()){ dirFile.mkdirs(); } List<FileInputStream> list = new ArrayList<FileInputStream>(); //获取暂存地址中的文件 File[] files = tempFile.listFiles(); for (int i = 0; i < files.length; i++) { //用FileInputStream读取放入list集合 list.add(new FileInputStream(new File(tempFile, i+".part"))); } //使用 Enumeration(列举) 将文件全部列举出来 Enumeration<FileInputStream> eum = Collections.enumeration(list); //SequenceInputStream合并流 合并文件 SequenceInputStream sis = new SequenceInputStream(eum); FileOutputStream fos = new FileOutputStream(new File(dirFile, fileName)); byte[] by = new byte[100]; int len; while((len=sis.read(by)) != -1){ fos.write(by, 0, len); } fos.flush(); fos.close(); sis.close(); System.out.println("合并完成!"); } } </span>
相关文章推荐
- springmvc练习
- 解决Perhaps you are running on a JRE rather than a JDK?问题
- ----基础总结----
- JDK 和 JRE 的配置 。
- java 集合 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
- Spring 的扩展机制测试
- 夯实JAVA基本之二 —— 反射(2):泛型相关周边信息获取
- java 集合 从类似如下的文本文件中读取出所有的姓名,并打印出重复的 * 姓名和重复的次数,并按重复次数排序:
- 如何加快Eclipse的启动速度?
- eclipse不能修改dynamic web module version的解决办法
- 七牛CDN部分JAVA使用教程
- SpringMVC的各种参数绑定方式
- Java数组初始化与内存控制
- java反射机制(1)- 知识点总结Java Reflection API操作
- Spring4.2.0设计思想---总体架构
- myeclipse 没有提示时的设置
- JDK切换版本
- 多线程之:java线程创建
- 关于java中==号的一点了解
- java基础阶段总结