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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

相信大家都看过视频,通过递归把指定目录的文件全扫出来.我根据老师讲的内容,自己改了一下.可以扫描到电脑内的影音.但我发现,实用性很差,盘目录多了.递归会把内存搞死.如果有对这类方法有研究的,大家一起交流一下.
顺便提一点,我根据需要做了一个切电影的小程序.把一部1GB以上的电脑分割成100MB每个碎片,但是不能播放,而mp3是可以的.这其中有什么问题么?
  1. import java.io.*;
  2. import java.util.*;
  3. class Test2//扫描电脑内各符内电影清单程序
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 writerFile();//执行程序.
  8.         }
  9.         public static void writerFile()//把List集合的内容加入到一个指定的写入流,写到文件中.
  10.         {
  11.                 BufferedWriter fw=null;
  12.                 try
  13.                 {
  14.                         fw=new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\电脑影片清单.txt"));//存放在桌面,我自己扫了一下.扫了视频教程+动画片等...共有上千个了.
  15. //通过递归这样扫文件,太吃力了.
  16.                         ArrayList<File> al=(ArrayList<File>)caeateList();
  17.                         for(File file:al)
  18.                         {
  19.                                 fw.write(file.getAbsolutePath());
  20.                                 fw.newLine();
  21.                                 fw.flush();
  22.                         }
  23.                 }
  24.                 catch(IOException e)
  25.                 {
  26.                         System.out.println(e.toString());
  27.                         throw new RuntimeException();
  28.                 }
  29.                 finally
  30.                 {
  31.                         if(fw!=null)
  32.                         try
  33.                         {
  34.                                 fw.close();
  35.                         }
  36.                         catch(Exception e)
  37.                         {System.out.println(e.toString());}
  38.                 }
  39.         }
  40.         public static List<File> caeateList()
  41.         {
  42.                 File[] f=File.listRoots();
  43.                 ArrayList<File> li=new ArrayList<File>();
  44.                 for(int i=1;i<4;i++)//只扫描D:/E:/F:怕内存递归次数太多,内存溢出这里扫到4是因为ilstRoots会把DVD记录机/虚拟光驱也当成磁盘.
  45.                 {
  46.                         scanFile(new File(f[i].toString()+"\\"),li);//加上字符\不然路径不明确,扫描失败
  47.                 }
  48.                 return li;
  49.         }
  50.         //通过递归扫查文件
  51.         public static void scanFile(File f,List<File> list)//通过迭代扫描所有文件夹,并通过List集合把扫描到的影音文件添加进List集合
  52.         {
  53.                
  54.                 File[] arr=f.listFiles();
  55.                 for(File file:arr)
  56.                 {
  57.                         if(file.isDirectory()&&!file.isHidden())//不扫隐藏的,其实不在C盘,也可以扫下.
  58.                                 scanFile(file, list);
  59.                         else
  60.                         {
  61.                                 if(file.toString().endsWith(".mp4")||file.toString().endsWith(".rmvb")||
  62.                                                 file.toString().endsWith(".avi")||file.toString().endsWith(".flv")||
  63.                                                 file.toString().endsWith(".wmv")||file.toString().endsWith(".rm"))
  64.                                         list.add(file);//只加入这几种影音文件
  65.                         }
  66.                 }
  67.         }
  68.         public static void sop(Object obj)
  69.         {
  70.                 System.out.println(obj);
  71.         }
  72. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

8 个回复

倒序浏览

回帖奖励 +10

估计这样玩电影文件有点太·····
回复 使用道具 举报
黄玉昆 发表于 2013-3-8 12:18
估计这样玩电影文件有点太·····

没有,就是为了实现这些功能嘛,其实这些零碎的功能,做得好了就都是一款好软件.像什么电子书切割器,铃声剪辑器.都是有需求的.这类东西虽然可能做不成公司的专业项目,但是可以自己练练手.而且也可以扩展一下自己的软件应用思维,把所学的东西都应用到实际中,也记得深点.

评分

参与人数 1黑马币 +3 收起 理由
黄玉昆 + 3 赞一个!

查看全部评分

回复 使用道具 举报

回帖奖励 +10

貌似有点深奥。过段时间可能看得懂。不过还是来顶顶。
回复 使用道具 举报

回帖奖励 +10

有钱人啊  
回复 使用道具 举报
用递归就是耗内存     我现在也不知道有什么更好的方法

不过你切割后应该文件后缀名  没改吧  rmvb 还是rmvb  MP3还是MP3  我感觉这样应该能播放 一段就死掉   
回复 使用道具 举报

回帖奖励 +10

{:soso_e113:}有钱人啊,占个位置赚10J再说
回复 使用道具 举报

回帖奖励 +10

这个有点意思,占个位置再说....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马