黑马程序员技术交流社区

标题: 文件切割组合问题~!~ [打印本页]

作者: 杜光    时间: 2013-6-5 21:09
标题: 文件切割组合问题~!~
本帖最后由 杜光 于 2013-6-9 22:39 编辑

下面这段代码中,被拆后 重新组合的文件总是和源文件大小不一致,求解~~~!!!
  1. import java.util.*;
  2. import java.io.*;

  3. class  SplitFile
  4. {
  5.         public static void main(String[] args)throws IOException
  6.         {
  7.                 splitFile();

  8.                 sequenceFile();

  9.         }

  10.         public static void splitFile()throws IOException
  11.         {
  12.                 FileInputStream fis = new FileInputStream("d:\\Demo\\day20\\1.mp3");

  13.                 FileOutputStream fos = null;

  14.                 byte[] buf = new byte[1024*1024];
  15.                
  16.                 int count = 1;

  17.                 int len = 0;

  18.                 while((len=fis.read(buf))!=-1)
  19.                 {
  20.                         fos = new FileOutputStream("d:\\Demo\\day20\\splitfiles\\"+(count++)+".part");
  21.                         fos.write(buf,0,len);
  22.                         fos.close();
  23.                 }

  24.                 fis.close();
  25.         }

  26.         public static void sequenceFile()throws IOException
  27.         {
  28.                 Vector<FileInputStream> v = new Vector<FileInputStream>();

  29.                 for (int a=1; a<6; a++)
  30.                 {
  31.                         v.add(new FileInputStream("D:\\Demo\\day20\\splitfiles\\"+(a++)+".part"));

  32.                 }

  33.                 Enumeration<FileInputStream> en = v.elements();

  34.                 SequenceInputStream sis = new SequenceInputStream(en);

  35.                 FileOutputStream fos = new FileOutputStream("d:\\1.mp3");

  36.                 byte[] buf = new byte[1024];

  37.                 int len = 0;

  38.                 while((len=sis.read(buf))!=-1)
  39.                 {
  40.                         fos.write(buf,0,len);
  41.                 }

  42.                 fos.close();
  43.                 sis.close();


  44.         }
  45. }
复制代码

作者: 娄田田    时间: 2013-6-5 23:19
  1. for (int a=1; a<6; a++)
  2.                 {
  3.                         v.add(new FileInputStream("D:\\Demo\\day20\\splitfiles\\"+(a++)+".part"));

  4.                 }
复制代码
你的这段代码for代码块中, v.add(new FileInputStream("D:\\Demo\\day20\\splitfiles\\"+(a++)+".part"));执行完之后a已经加1了,然后又执行了 for (int a=1; a<6; a++)循环中的a++,所以等于a每次加2了,肯定有部分字节流失的。
作者: 杜光    时间: 2013-6-6 11:19
娄田田 发表于 2013-6-5 23:19
你的这段代码for代码块中, v.add(new FileInputStream("D:\\Demo\\day20\\splitfiles\\"+(a++)+".part")); ...

一语点醒梦中人。。。自己写的东西。。总是不容易看出来。。 谢谢了
作者: 娄田田    时间: 2013-6-6 12:49
杜光 发表于 2013-6-6 11:19
一语点醒梦中人。。。自己写的东西。。总是不容易看出来。。 谢谢了

:)不客气  




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