本帖最后由 黄蒙 于 2015-8-21 11:10 编辑
- import java.io.*;
- import java.util.*;
- /**
- * 需求:按指定大小分割一个文件成三份,把三份文件组合成一份
- *
- * 思路:把文件按大小分割成三份,那么就需要用到多个输出流?
- * 把文件从三份组合成一份就需要用到流的合并。流的合并需要用到SequenceInputStream
- * 源 硬盘文件 目的 硬盘文件
- * 输入流对象 FileInputStream----> 输出流对象 FileOutputStream
- * |-> 输出流对象 FileOutputStream
- * |-> 输出流对象 FileOutputStream
- *
- * 源 硬盘文件 目的 硬盘文件
- * 输入流对象 FileInputStream-----> SequenceInputStream---> 输出流对象 FileOutputStream
- * 输入流对象 FileInputStream-|
- * 输入流对象 FileInputStream-|
- * */
- public class Div_Con_Files {
- public static void main(String[] args) throws IOException
- {
- // TODO Auto-generated method stub
- conFiles();
-
- }
- public static void divFiles() throws IOException//将一个文件分割成多个文件
- {
- File file=new File("F:\\学习\\java\\test.png");//源文件
- FileInputStream fis= new FileInputStream(file);
-
- int len = 0;
- int num = 1;
- byte[] by = new byte[512*1024];//设定每一份分割文件大小
-
- while((len=fis.read(by))!=-1)//当写满一个指定的分割文件大小后,新建一个新的输出流继续写下一部分
- {
- FileOutputStream fos = new FileOutputStream("F:\\学习\\java\\"+(num++)+".part");
- fos.write(by,0,len);
- fos.close();
- }
- fis.close();
- }
-
- public static void conFiles() throws IOException//将多个文件组合成一个文件
- {
-
- int part = 1;
- ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
- while(part<=4)//将全部的文件都写入输入流并保存在ArrayList中
- {
- File file = new File("F:\\学习\\java\\"+(part++)+".part");
- al.add(new FileInputStream(file));
- }
-
- //建立一个枚举对象(匿名内部类),该枚举对象的枚举内容即全部的源文件的输入流
- //这个枚举对象用于传递给SequenceInputStream
- Iterator<FileInputStream> it=al.iterator();
- Enumeration<FileInputStream> en=new Enumeration<FileInputStream>()
- {
- public boolean hasMoreElements()
- {
- return it.hasNext();
- }
- public FileInputStream nextElement()
- {
- return it.next();
- }
- };
-
- //建立输出流
- File file = new File("F:\\学习\\java\\success.png");
- FileOutputStream fos=new FileOutputStream(file);
-
- //建立SequenceInputStream将所有输入流会合输入
- SequenceInputStream sis=new SequenceInputStream(en);
- int len=0;
- byte[] by=new byte[1024*1024];
- while((len=sis.read(by))!=-1)
- {
- fos.write(by, 0, len);//输出流写入文件
- }
-
- fos.close();
- sis.close();
- }
- }
复制代码
写了很久,累死了。。大家看看 |
|