相信大家都看过视频,通过递归把指定目录的文件全扫出来.我根据老师讲的内容,自己改了一下.可以扫描到电脑内的影音.但我发现,实用性很差,盘目录多了.递归会把内存搞死.如果有对这类方法有研究的,大家一起交流一下.
顺便提一点,我根据需要做了一个切电影的小程序.把一部1GB以上的电脑分割成100MB每个碎片,但是不能播放,而mp3是可以的.这其中有什么问题么?- import java.io.*;
- import java.util.*;
- class Test2//扫描电脑内各符内电影清单程序
- {
- public static void main(String[] args)
- {
- writerFile();//执行程序.
- }
- public static void writerFile()//把List集合的内容加入到一个指定的写入流,写到文件中.
- {
- BufferedWriter fw=null;
- try
- {
- fw=new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\电脑影片清单.txt"));//存放在桌面,我自己扫了一下.扫了视频教程+动画片等...共有上千个了.
- //通过递归这样扫文件,太吃力了.
- ArrayList<File> al=(ArrayList<File>)caeateList();
- for(File file:al)
- {
- fw.write(file.getAbsolutePath());
- fw.newLine();
- fw.flush();
- }
- }
- catch(IOException e)
- {
- System.out.println(e.toString());
- throw new RuntimeException();
- }
- finally
- {
- if(fw!=null)
- try
- {
- fw.close();
- }
- catch(Exception e)
- {System.out.println(e.toString());}
- }
- }
- public static List<File> caeateList()
- {
- File[] f=File.listRoots();
- ArrayList<File> li=new ArrayList<File>();
- for(int i=1;i<4;i++)//只扫描D:/E:/F:怕内存递归次数太多,内存溢出这里扫到4是因为ilstRoots会把DVD记录机/虚拟光驱也当成磁盘.
- {
- scanFile(new File(f[i].toString()+"\\"),li);//加上字符\不然路径不明确,扫描失败
- }
- return li;
- }
- //通过递归扫查文件
- public static void scanFile(File f,List<File> list)//通过迭代扫描所有文件夹,并通过List集合把扫描到的影音文件添加进List集合
- {
-
- File[] arr=f.listFiles();
- for(File file:arr)
- {
- if(file.isDirectory()&&!file.isHidden())//不扫隐藏的,其实不在C盘,也可以扫下.
- scanFile(file, list);
- else
- {
- if(file.toString().endsWith(".mp4")||file.toString().endsWith(".rmvb")||
- file.toString().endsWith(".avi")||file.toString().endsWith(".flv")||
- file.toString().endsWith(".wmv")||file.toString().endsWith(".rm"))
- list.add(file);//只加入这几种影音文件
- }
- }
- }
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- }
复制代码 |