黑马程序员技术交流社区
标题:
不通过递归如何扫描电脑内所有目录及文件夹
[打印本页]
作者:
陈圳
时间:
2013-3-8 11:36
标题:
不通过递归如何扫描电脑内所有目录及文件夹
相信大家都看过视频,通过递归把指定目录的文件全扫出来.我根据老师讲的内容,自己改了一下.可以扫描到电脑内的影音.但我发现,实用性很差,盘目录多了.递归会把内存搞死.如果有对这类方法有研究的,大家一起交流一下.
顺便提一点,我根据需要做了一个切电影的小程序.把一部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);
}
}
复制代码
作者:
黄玉昆
时间:
2013-3-8 12:18
估计这样玩电影文件有点太·····
作者:
陈圳
时间:
2013-3-8 12:24
黄玉昆 发表于 2013-3-8 12:18
估计这样玩电影文件有点太·····
没有,就是为了实现这些功能嘛,其实这些零碎的功能,做得好了就都是一款好软件.像什么电子书切割器,铃声剪辑器.都是有需求的.这类东西虽然可能做不成公司的专业项目,但是可以自己练练手.而且也可以扩展一下自己的软件应用思维,把所学的东西都应用到实际中,也记得深点.
作者:
HM刘俊
时间:
2013-3-10 11:30
貌似有点深奥。过段时间可能看得懂。不过还是来顶顶。
作者:
amen0205
时间:
2013-3-11 04:18
有钱人啊
作者:
amen0205
时间:
2013-3-11 05:12
用递归就是耗内存 我现在也不知道有什么更好的方法
不过你切割后应该文件后缀名 没改吧 rmvb 还是rmvb MP3还是MP3 我感觉这样应该能播放 一段就死掉
作者:
BitmapFactory
时间:
2013-3-11 06:51
{:soso_e113:}有钱人啊,占个位置赚10J再说
作者:
michaelchen
时间:
2013-3-11 08:17
这个有点意思,占个位置再说....
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2