| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 718 人关注过本帖
标题:[求助]想用递规查看磁盘所有文件,程序不会退出了..
只看楼主 加入收藏
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
收藏
 问题点数:0 回复次数:6 
[求助]想用递规查看磁盘所有文件,程序不会退出了..

我想实现用递规在磁盘中找一个指定的文件,当找到第一个符合条件的文时,打印出文件路径后退出程序!

下面这段程序的问题是:当找到第一个符合条件的文件后,不会退出,直到把所有磁盘检查完毕后才退出~

请帮忙看看,问题出在哪里了?谢谢!


import java.io.*;


public class FindFile
{
private String fileName;
public FindFile(String fileName)
{
this.fileName = fileName;
}

public String find()
{
File[] objfile = new File("").listRoots();
String strPath = "";
String path = "无此文件";
for(int i=0;i<objfile.length;i++)
{
String fpath = objfile[i].getPath();
System.out.println(fpath);
strPath = this.doFind(fpath,fileName);

if(!strPath.equals("无此文件"))
{
path = strPath;
}
}
return path;
}

//strPathName是表示在什么路径范围内查找,strFileName是表示要找文件的名字
public String doFind(String strPathName,String strFileName)
{
String path = "无此文件";//最终返回目标文件的路径

File f = new File(strPathName);
File[] flist = f.listFiles();
String str ;
for(int i=0;i<flist.length;i++)
{
str = flist[i].getPath() + " "+flist[i].getName();
str = flist[i].getName();
if(flist[i].isFile())
{
if(str.equals(strFileName))
{
System.out.println(flist[i].getAbsolutePath());

path = flist[i].getAbsolutePath();
break; //这里break后会继续执行else if里面doFind()方法...
}
}
else if(flist[i].isDirectory())
{
doFind(flist[i].getAbsolutePath(),strFileName);
}
}
return path;
}

public static void main(String[] args)
{
System.out.println("找到目标文件: "+ new FindFile("8.exe").find());//找一个名为8.exe的文件
}
}

望高人指点一下

[此贴子已经被作者于2007-4-3 15:41:22编辑过]

搜索更多相关主题的帖子: 磁盘 文件 fileName String 
2007-04-03 15:21
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
if(!strPath.equals("无此文件"))
{
path = strPath;
}
你的程序不可能会返回"无此文件"

可惜不是你,陪我到最后
2007-04-03 15:34
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
收藏
得分:0 

改了一下..还是之前的问题..


我在说's blog   http://www..cn
2007-04-03 15:42
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

还有,你不应该这样递归,按你的程序,即使找到了,也会递归下去的,
for(int i=0;i<objfile.length;i++)
{
String fpath = objfile[i].getPath();
System.out.println(fpath);
strPath = this.doFind(fpath,fileName);

if(!strPath.equals("无此文件"))
{
path = strPath;
}
}

因为你用了一个for循环,所以,你得起一个boolean,如果找到了就设其为true,然后每个循环的时候,查一下它,看看是不是上个递归找到了文件,如果找到了,就break吧
}


可惜不是你,陪我到最后
2007-04-03 16:04
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
收藏
得分:0 

那如果不用for的话还有什么好办法可以用递规来解决现在的问题呢?


我在说's blog   http://www..cn
2007-04-03 16:07
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
用FOR可以,但是你不要一直FOR下去,等每个盘都递归完了以后,要判断一下,决定要不要下一个盘的递归就行了

可惜不是你,陪我到最后
2007-04-03 16:09
limaoyuan
Rank: 1
等 级:新手上路
帖 子:493
专家分:0
注 册:2006-6-25
收藏
得分:0 

恩...好,谢谢!晚上回来..我再试着弄弄吧..谢谢!


我在说's blog   http://www..cn
2007-04-03 16:15
快速回复:[求助]想用递规查看磁盘所有文件,程序不会退出了..
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028371 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved