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

© 苏乞儿 中级黑马   /  2014-9-28 21:56  /  1371 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看张老师的视频,麻烦,不知怎么用暴风影音添加目录([size=14.3999996185303px]是一个文件里只有一个视频),老是一个一个的添加视频。想想老师讲的IO流,递归遍历文件。
想何不自己写个程序,将视频文件同一Copy到指定目录呢?哈哈,一个晚自习啊(我是菜鸟我怕谁),试了试看着还行,请大家指点一下啊。
  1. package cn.itcast.CopyAvi;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;

  5. /*
  6. * 将G:\BaiduYunDownload\张孝祥Java高新技术中的avi文件复制到F:\java视频资料中去,
  7. * 并新建    张孝祥Java高新技术文件夹中
  8. * 思路:
  9. * 1.递归遍历源目录
  10. * 2.判断文件是文件夹还是文件。若是文件则判断是否是.avi结尾。若不是文件,则继续执行1
  11. * 3.文件若以.avi结尾。则调用本地IO技术进行读写操作。
  12. */
  13. public class CopyAvi {

  14.         public static void main(String[] args) throws Exception {
  15.                 long start =System.currentTimeMillis();
  16.                 // 现将源文件和目标文件封装成File对象
  17.                 File srcDir = new File("G:\\BaiduYunDownload\\张孝祥Java高新技术");
  18.                 File tarDir = new File("F:\\java视频资料\\张孝祥Java高新技术");
  19.                 if(!tarDir.exists())
  20.                         tarDir.mkdirs();
  21.                 printSrcDir(srcDir, tarDir);
  22.                 long end=System.currentTimeMillis();
  23.                 System.out.println(end-start);
  24.         }

  25.         // 写一个遍历源目录的方法
  26.         private static void printSrcDir(File srcDir, File tarDir) throws Exception {
  27.                 File[] files = srcDir.listFiles();
  28.                 // 遍历元目录
  29.                 for (File file : files) {
  30.                         if (file.isDirectory()) {
  31.                                 printSrcDir(file, tarDir);
  32.                         } else {
  33.                                 if (file.getName().endsWith(".avi")) {
  34.                                         File newTar = new File(tarDir, file.getName());
  35.                                         copyFiles(file, newTar);
  36.                                 }
  37.                         }
  38.                 }
  39.         }

  40.         private static void copyFiles(File file, File newTar) throws Exception {
  41.                 // 读写文件
  42.                 FileInputStream fis = new FileInputStream(file);
  43.                 FileOutputStream fos = new FileOutputStream(newTar);
  44.                 int len = 0;
  45.                 byte[] arr = new byte[1024];
  46.                 while ((len = fis.read(arr)) != -1) {
  47.                         fos.write(arr, 0, len);
  48.                 }
  49.                 fos.close();
  50.                 fis.close();

  51.         }

  52. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
本帖最后由 darkads 于 2014-9-29 10:29 编辑

很不错,可以达到实际效果,使用所学的知识解决实际问题,这样学习起来才更有动力,更有成就感,加油!
1.copy文件时候最好使用BufferedInputstream和BufferedOutputStream,这样速度快一些
我运行了一下,不使用缓冲的话,20多个文件第一次花了6秒多,一度让我认为陷入死循环了,再次运行由于文件系统的缓存大概在2.5秒左右,使用缓冲第一次0.8秒,其后在0.6秒
由于IO流在绝大多数的时候是程序运行的瓶颈,所以在文件复制时,一般要使用Buffered流,如果文件较大数量不多,使用FileChannel速度会再快一些
2.还有在对方法注释时,不要使用//,而是/**,回车,Eclipse会自动补全剩下的,不仅看起来更美观,而且在文档中这是一个方法的标准注释
  1.         /**
  2.          *
  3.          * @param file
  4.          * @param newTar
  5.          * @throws Exception
  6.          */
复制代码
回复 使用道具 举报
darkads 发表于 2014-9-29 10:25
很不错,可以达到实际效果,使用所学的知识解决实际问题,这样学习起来才更有动力,更有成就感,加油!
1.c ...

太感谢了。谢谢大神的指导!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马