黑马程序员技术交流社区
标题:
求助:最近老是在io流处出错,想合并文件,却失败??怎么破?
[打印本页]
作者:
潜伏
时间:
2013-11-30 18:14
标题:
求助:最近老是在io流处出错,想合并文件,却失败??怎么破?
/*
切割一个文件
运用合并流将几个文件合并到一个文件
*/
import java.util.*;
import java.io.*;
class SequenceInputStreamDemo
{
public static void main(String[] args) throws IOException
{
//qiege();
//hebing();
}
public static void qiege()throws IOException
{
BufferedInputStream bi=new BufferedInputStream(new FileInputStream("D:\\aa\\day20\\新建文件夹\\1.mp3"));
BufferedOutputStream bo;
int num=0,count=1;
byte[] arr=new byte[1024*1024];
while((num=bi.read(arr))!=-1)
{
bo=new BufferedOutputStream(new FileOutputStream("D:\\aa\\day20\\新建文件夹\\"+(count++)+".part"));
bo.write(arr,0,num);
bo.close();
}
bi.close();
}
public static void hebing()throws IOException
{
FileInputStream f1=new FileInputStream("D:\\aa\\day20\\新建文件夹\\1.part");
FileInputStream f2=new FileInputStream("D:\\aa\\day20\\新建文件夹\\2.part");
FileInputStream f3=new FileInputStream("D:\\aa\\day20\\新建文件夹\\3.part");
FileInputStream f4=new FileInputStream("D:\\aa\\day20\\新建文件夹\\4.part");
FileInputStream f5=new FileInputStream("D:\\aa\\day20\\新建文件夹\\5.part");
Vector<FileInputStream> v=new Vector<FileInputStream>();
v.add(f1);
v.add(f2);
v.add(f3);
v.add(f4);
v.add(f5);
Enumeration<FileInputStream> e=v.elements();
SequenceInputStream si=new SequenceInputStream(e);
BufferedOutputStream bo1=new BufferedOutputStream(new FileOutputStream("D:\\aa\\day20\\新建文件夹\\2.mp3"));
int num=0;
byte[] arr1=new byte[1024*1024];
while((num=si.read(arr1))!=-1)
{
bo1.write(arr1,0,num);
System.out.println(num);
bo1.flush();
}
bo1.close();
si.close();
}
}
作者:
Sasson
时间:
2013-11-30 18:41
/*
切割一个文件
运用合并流将几个文件合并到一个文件
*/
import java.util.*;
import java.io.*;
class SequenceInputStreamDemo
{
public static void main(String[] args) throws IOException
{
//qiege();
//hebing();
}
public static void qiege()throws IOException
{
BufferedInputStream bi=new BufferedInputStream(new FileInputStream("D:\\aa\\day20\\新建文件夹\\1.mp3"));
BufferedOutputStream bo;
int num=0,count=1;
byte[] arr=new byte[1024*1024];
while((num=bi.read(arr))!=-1)
{
bo=new BufferedOutputStream(new FileOutputStream("D:\\aa\\day20\\新建文件夹\\"+(count++)+".part"));
bo.write(arr,0,num);
bo.close();
}
bi.close();
}
public static void hebing()throws IOException
{
/*
上面切割的时候,是按照每个文件1M切的,如果刚好能窃够五个文件,那这个地方合成就不会出错,如果文件不是五个,虚拟机肯定会报错了
既然知道SequenceInputStream流,相比也学File了吧 这里可以用File做,第一步得出文件列表,然后遍历,添加到Vector中就行了
这样做比较灵活 不必知道切了多少个文件
FileInputStream f1=new FileInputStream("D:\\aa\\day20\\新建文件夹\\1.part");
FileInputStream f2=new FileInputStream("D:\\aa\\day20\\新建文件夹\\2.part");
FileInputStream f3=new FileInputStream("D:\\aa\\day20\\新建文件夹\\3.part");
FileInputStream f4=new FileInputStream("D:\\aa\\day20\\新建文件夹\\4.part");
FileInputStream f5=new FileInputStream("D:\\aa\\day20\\新建文件夹\\5.part");
Vector<FileInputStream> v=new Vector<FileInputStream>();
v.add(f1);
v.add(f2);
v.add(f3);
v.add(f4);
v.add(f5);
*/
Vector<FileInputStream> v = new Vector<>();
File dir = new File("D:\\aa\\day20\\新建文件夹");
FileInputStream f;
File[] files = dir.listFiles();
for(File file : files) {
if(file.isFile()) {
f = new FileInputStream(file);
v.add(f);
}
}
Enumeration<FileInputStream> e=v.elements();
SequenceInputStream si=new SequenceInputStream(e);
BufferedOutputStream bo1=new BufferedOutputStream(new FileOutputStream("D:\\aa\\day20\\新建文件夹\\2.mp3"));
int num=0;
byte[] arr1=new byte[1024*1024];
while((num=si.read(arr1))!=-1)
{
bo1.write(arr1,0,num);
System.out.println(num);
bo1.flush();
}
bo1.close();
si.close();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2