当前位置: 代码迷 >> Java相关 >> [求助]想用递规查看磁盘所有文件,程序不会退出了..
  详细解决方案

[求助]想用递规查看磁盘所有文件,程序不会退出了..

热度:192   发布时间:2007-04-03 15:21:05.0
[求助]想用递规查看磁盘所有文件,程序不会退出了..

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

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

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


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  

----------------解决方案--------------------------------------------------------
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下去,等每个盘都递归完了以后,要判断一下,决定要不要下一个盘的递归就行了

----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
  相关解决方案