黑马程序员技术交流社区

标题: 将一个文件切割&将多个文件合并 [打印本页]

作者: 黄蒙    时间: 2015-8-21 11:08
标题: 将一个文件切割&将多个文件合并
本帖最后由 黄蒙 于 2015-8-21 11:10 编辑


  1. import java.io.*;
  2. import java.util.*;

  3. /**
  4. * 需求:按指定大小分割一个文件成三份,把三份文件组合成一份
  5. *
  6. * 思路:把文件按大小分割成三份,那么就需要用到多个输出流?
  7. *                 把文件从三份组合成一份就需要用到流的合并。流的合并需要用到SequenceInputStream
  8. *  源 硬盘文件                                                目的        硬盘文件
  9. *  输入流对象 FileInputStream----> 输出流对象 FileOutputStream
  10. *                                                         |->        输出流对象 FileOutputStream
  11. *                                                         |->        输出流对象 FileOutputStream
  12. *
  13. * 源 硬盘文件                                                                                                目的        硬盘文件
  14. * 输入流对象 FileInputStream-----> SequenceInputStream--->        输出流对象 FileOutputStream
  15. * 输入流对象 FileInputStream-|
  16. * 输入流对象 FileInputStream-|
  17. * */
  18. public class Div_Con_Files {

  19.         public static void main(String[] args) throws IOException
  20.         {
  21.                 // TODO Auto-generated method stub
  22.                         conFiles();
  23.                         
  24.         }
  25.         public static void divFiles() throws IOException//将一个文件分割成多个文件
  26.         {
  27.                 File file=new File("F:\\学习\\java\\test.png");//源文件
  28.                 FileInputStream fis= new FileInputStream(file);
  29.                
  30.                 int len = 0;
  31.                 int num = 1;
  32.                 byte[] by = new byte[512*1024];//设定每一份分割文件大小
  33.                
  34.                 while((len=fis.read(by))!=-1)//当写满一个指定的分割文件大小后,新建一个新的输出流继续写下一部分
  35.                 {
  36.                         FileOutputStream fos = new FileOutputStream("F:\\学习\\java\\"+(num++)+".part");
  37.                         fos.write(by,0,len);
  38.                         fos.close();
  39.                 }
  40.                 fis.close();
  41.         }
  42.         
  43.         public static void conFiles() throws IOException//将多个文件组合成一个文件
  44.         {
  45.                
  46.                 int part = 1;
  47.                 ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
  48.                 while(part<=4)//将全部的文件都写入输入流并保存在ArrayList中
  49.                 {
  50.                         File file = new File("F:\\学习\\java\\"+(part++)+".part");
  51.                         al.add(new FileInputStream(file));
  52.                 }
  53.                
  54.                 //建立一个枚举对象(匿名内部类),该枚举对象的枚举内容即全部的源文件的输入流
  55.                 //这个枚举对象用于传递给SequenceInputStream
  56.                 Iterator<FileInputStream> it=al.iterator();
  57.                 Enumeration<FileInputStream> en=new Enumeration<FileInputStream>()
  58.                 {
  59.                         public boolean hasMoreElements()
  60.                         {
  61.                                 return it.hasNext();
  62.                         }
  63.                         public FileInputStream nextElement()
  64.                         {
  65.                                 return it.next();
  66.                         }
  67.                 };
  68.                
  69.                 //建立输出流
  70.                 File file = new File("F:\\学习\\java\\success.png");
  71.                 FileOutputStream fos=new FileOutputStream(file);
  72.                
  73.                 //建立SequenceInputStream将所有输入流会合输入
  74.                 SequenceInputStream sis=new SequenceInputStream(en);
  75.                 int len=0;
  76.                 byte[] by=new byte[1024*1024];
  77.                 while((len=sis.read(by))!=-1)
  78.                 {
  79.                         fos.write(by, 0, len);//输出流写入文件
  80.                 }
  81.                
  82.                 fos.close();
  83.                 sis.close();        
  84.         }

  85. }
复制代码


写了很久,累死了。。大家看看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2