黑马程序员技术交流社区
标题:
分享一个将文件流合并的方法
[打印本页]
作者:
wuhyoung
时间:
2014-5-27 12:22
标题:
分享一个将文件流合并的方法
我在看毕老师讲基础课程关于讲文件合并流,毕老师只讲了使用vector集合合并流的方法,但是我觉得这个方法用起来比较麻烦,自己在看老师讲的基础课程后面发现
FileOutputStream(des, true);是可以将文件流继续添加的,所以使用这个方法还是可以合并文件流的,并且能够将文件合并进度和文件的大小显示出来,直接上方法代码:
private void combineFile(File src, File des) throws IOException {
Set<File> set = new TreeSet<File>(new MyComparator());
File[] files = src.listFiles();
FileOutputStream fos = new FileOutputStream(des, true);
/**
* 将文件存储到集合当中, 集合是有序的, 自己写了一个排序类
* */
for (File f : files) {
set.add(f);
}
long filesize = set.size() * 5; // 完成后文件大小
double size = (100.0) / set.size(); // 每完成一次,完成的进度是多少
double lonsize = 0; // 完成了多少进度
/**
* 按照集合内存储文件的顺序取出文件的部分, 将一起整合写入到流当中去。
* */
int len = -1;
byte[] buf = new byte[1024];
for (Iterator<File> it = set.iterator(); it.hasNext();) {
lonsize = lonsize + size;
if (lonsize > 100)
lonsize = 100;
System.out.println("-----合并度------" + (int) lonsize + " % "
+ "-----目标大小------" + filesize + "Mb" + "-----完成文件数------"
+ degree + " / " + filecount);
textarea.append("-----合并度------" + (int) lonsize + " % "
+ "-----目标大小------" + filesize + "Mb" + "-----完成文件数------"
+ degree + " / " + filecount+"\r\n");
File f = it.next();
FileInputStream fis = new FileInputStream(f);
while ((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len - 20);
}
fis.close();
}
fos.close();
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2