本帖最后由 just_nnnnx 于 2013-12-28 08:31 编辑
- import java.io.*;
- import java.util.*;
- class Test
- {
- public static void main(String[] args) throws IOException
- {
- splitFiles();
- merge();
- }
- public static void splitFiles()throws IOException
- {
- FileInputStream fis = new FileInputStream("d:\\1.jpg");
- FileOutputStream fos = null;
- byte[] by = new byte[1024*10];
- int line = 0;
- int count = 1;
- while((line = fis.read(by))!=-1)
- {
- fos = new FileOutputStream("d:\\splitFiles\\"+(count++)+".part");
- fos.write(by,0,line);
- fos.close();
- }
- fis.close();
- }
- public static void merge()throws IOException
- {
- Vector<FileInputStream> vt = new Vector<FileInputStream>();
- File file = new File("d:\\splitFiles");
- File[] files = file.listFiles();
- for(File f : files)
- {
- FileInputStream fis = new FileInputStream(f);
- vt.add(fis);
- }
- Enumeration<FileInputStream> en = vt.elements();
- SequenceInputStream sis = new SequenceInputStream(en);
- FileOutputStream fos = new FileOutputStream("d:\\splitFiles\\merge.jpg");
- byte[] bt = new byte[1024*10];
- int num = 0;
- while((num = sis.read(bt))!=-1)
- {
- fos.write(bt,0,num);
- fos.flush();
- }
- fos.close();
- sis.close();
- }
- }
复制代码 这是个图片切割合并的代码,分割成part的时候是可以的,然后合并的时候问题出现了,当目标文件名称是数字时,比如1.jpg,重复运行也没有问题,但如果目标文件总称是英文,比如上面的merge.jpg时,第一次运行,结果是可行的,但如果再次运行,刚会一直在往目标文件中读流,停不下来,ctrl+c停下来后,会发现目标文件很大很大,时间运行的越久 ,文件越大,请问这是什么原因?
|