我在看毕老师讲基础课程关于讲文件合并流,毕老师只讲了使用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();
- }
复制代码
|
|