我想实现用递规在磁盘中找一个指定的文件,当找到第一个符合条件的文时,打印出文件路径后退出程序!
下面这段程序的问题是:当找到第一个符合条件的文件后,不会退出,直到把所有磁盘检查完毕后才退出~
请帮忙看看,问题出在哪里了?谢谢!
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编辑过]
----------------解决方案--------------------------------------------------------
if(!strPath.equals("无此文件"))
{
path = strPath;
}
你的程序不可能会返回"无此文件"
----------------解决方案--------------------------------------------------------
改了一下..还是之前的问题..
----------------解决方案--------------------------------------------------------
还有,你不应该这样递归,按你的程序,即使找到了,也会递归下去的,
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吧
}
----------------解决方案--------------------------------------------------------
那如果不用for的话还有什么好办法可以用递规来解决现在的问题呢?
----------------解决方案--------------------------------------------------------
用FOR可以,但是你不要一直FOR下去,等每个盘都递归完了以后,要判断一下,决定要不要下一个盘的递归就行了
----------------解决方案--------------------------------------------------------
恩...好,谢谢!晚上回来..我再试着弄弄吧..谢谢!
----------------解决方案--------------------------------------------------------