A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴杰栋 中级黑马   /  2014-8-29 21:37  /  1272 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴杰栋 于 2014-8-29 21:40 编辑

在我们下载的视频.比如张孝祥老师的Java高新技术,由于是压缩包,我们在解压的时候,每个视频都会存在于两层的文件夹中,这样连续观看起来的话,需要点多次的文件夹,该需求就是将给定路径下的所有的avi文件(当然也可以指定其他文件)单独复制到一个文件夹中去,方便我们的学习
  1. package wjd.file;
  2. //使用缓冲区  时间16161     不使用缓冲去是11690
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. /**
  10. *
  11. * @author 吴杰栋
  12. *2014年8月28日下午6:54:28
  13. *
  14. *需求:在网络上下载的各种视频文件,由于压缩包的存在,会导致视频文件会存在于多个文件夹中,这样观看起来会不方法
  15. *   该小程序可以完成对目标文件夹中avi格式视频的抽取,运行该程序后,会把目标文件中所有的avi文件复制到目标文件
  16. */
  17. public class CopyByAVI {

  18.         public static void main(String[] args) throws IOException {
  19.                 //定义目标文件和文件过滤器,用来过滤.avi文件
  20.                 String url1 = "D:\\BaiduYunDownload\\java";
  21.                 File f1 = new File(url1);
  22.                 FindAVI fa = new FindAVI();
  23.                 //查找目标文件中的.avi文件
  24.                 long begin = System.currentTimeMillis();
  25.                 listAVI(f1, fa);
  26.                 long time = System.currentTimeMillis() - begin;
  27.                 System.out.println(time+"======================");
  28.         }

  29.         public static void listAVI(File f1, FindAVI fa) throws IOException {
  30.                 File[] files = f1.listFiles();
  31.                 for (int a = 0; a < files.length; a++) {
  32.                         //递归,查找
  33.                         if (files[a].isDirectory())
  34.                                 listAVI(files[a], fa);
  35.                         else {
  36.                                 //递归结束,找到源文件中所有的文件,然后通过文件过滤器,拿到.avi文件
  37.                                 if (fa.accept(files[a])) {
  38.                                         System.out.println(files[a]);
  39.                                         //复制.avi文件
  40.                                         copyavi(files[a]);
  41.                                 }
  42.                         }
  43.                 }
  44.         }
  45. //对.avi文件进行复制,由于上面时候到了递归,那么我们的目标文件就在该方法中创建,然后使用标准复制流程就可以
  46.         public static void copyavi(File file) throws IOException {
  47.                 //创建目标文件夹,并把他创建出来
  48.                 String url2 = "D:\\Java高新";
  49.                 File f2 = new File(url2);
  50.                 f2.mkdir();
  51.                 FileInputStream fis = new FileInputStream(file);
  52.                 FileOutputStream fos = new FileOutputStream(new File(f2,file.getName()));
  53.                 //BufferedInputStream bis = new BufferedInputStream(fis);
  54.                 //BufferedOutputStream bos = new BufferedOutputStream(fos);
  55.                 byte[] buf = new byte[1024];
  56.                 int len = 0;
  57.                
  58.                 while ((len = fis.read(buf)) != -1) {
  59.                         fos.write(buf, 0, len);
  60.                 }
  61.         
  62.                 fis.close();
  63.                 fos.close();
  64.         }
  65. }
  66. package wjd.file;

  67. import java.io.File;
  68. import java.io.FileFilter;

  69. public class FindAVI implements FileFilter {

  70.         @Override
  71.         public boolean accept(File arg0) {
  72.                 return arg0.getName().endsWith("avi");
  73.         }

  74. }
复制代码



前.PNG (100.52 KB, 下载次数: 5)

原始解压前文件

原始解压前文件

后.PNG (222.04 KB, 下载次数: 14)

解压后,视频都在统一文件夹下

解压后,视频都在统一文件夹下

4 个回复

倒序浏览
还有个小知识点,在使用字节流的时候,一般不需要使用缓冲区,缓冲区在字符流中比较常用,
这边我测试下,使用缓冲区的时间反而比没有使用缓冲区的时间要长
回复 使用道具 举报
{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}
回复 使用道具 举报
厉害,活学活用
回复 使用道具 举报
牛人啊!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马