如何使用递归的方法获得指定文件夹下某个指定文件的完整路径?我自己写了段代码,但是有些问题,请指教

importjava.io.File;classTest{publicstaticvoidmain(Stringargs[]){Stringkeypath="e:/";S... import java.io.File;

class Test{
public static void main(String args[]){
String keypath = "e:/";
String keyfile = "li.txt";
File myfile = new File(keypath);
System.out.println(searchMyFile(myfile,keyfile));
}

public static String searchMyFile(File path,String filename){
File[] myfilelist = path.listFiles();
for(File f : myfilelist){
if(f.isDirectory()){
return searchMyFile(f,filename);
}else if(f.getName().equals(filename)){
return f.getAbsolutePath();
}
}
return "找不到指定的文件!";
}
}
这段代码编译后,我发现时而能找到指定的文件,但是有时候又找不到,搞不清楚哪里出问题了,能帮忙详细分析一下吗?请不要从别的地方搬代码过来,我自己也看过一些例子,还请就根据我现在的代码给出修正。不胜感激。
展开
 我来答
a4829201
推荐于2017-10-06 · TA获得超过159个赞
知道答主
回答量:142
采纳率:0%
帮助的人:125万
展开全部
我自己写的一个递归 希望对你有忙住:
public void findFolder(String str){
File file=new File(str);//传入一个目录用file包装成文件对象
if(file.isDirectory()){//判断是否是一个文件夹目录
File [] listFile=file.listFiles();//获得文件夹下所有的文件或文件夹
for (int i = 0; i < listFile.length; i++) {
if(listFile[i].isDirectory()){//以此判断每个文件看是否是子文件夹
String strpath=listFile[i].getPath();//得到子文件夹的目录
findFolder(strpath);//递归调用
System.out.println(listFile[i].getName());//文件夹下面的所有文件夹
}else{
System.out.println(listFile[i].getName());//文件夹下面所有的文件
}
System.out.println(listFile[i].getName());//文件夹下面的所有文件和文件夹
}
}
}
追问
我想让这个方法返回一个String。麻烦您能指出我上面的代码有什么不对的地方吗?比如说String keypath这个变量的赋值,我是不是路径的书写有问题?这段代码我测试以后,发现li.txt文件我重新放到D盘下别的某个文件夹下,程序就查找不到了。很郁闷啊。。。
追答
public static void main(String args[]){
String keypath = "e:/";
String keyfile = "a.xml";
File myfile = new File(keypath);
System.out.println(searchMyFile(myfile,keyfile));
}
public static String str;
public static String searchMyFile(File path,String filename){
File[] myfilelist = path.listFiles();
if(myfilelist!=null){
for(File f : myfilelist){
if(f.isDirectory()){
searchMyFile(f,filename);
}else if(f.getName().equals(filename)){
str=f.getAbsolutePath();
}
}
}

if(str!=null){
return str;
}else{
return "找不到系统文件";
}
}

这样就可以了 呵呵
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风之佐
2012-03-08
知道答主
回答量:33
采纳率:0%
帮助的人:7.2万
展开全部
public class Test{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入要找的目录:");
String path = input.next();
System.out.println("请输入查找关键字:");
String name = input.next();
File f = new File(path);
if(f.exists()){
find(f,name);
}
else
System.out.println("目录错误!");

}

public static void find(File f,String name){
File dir[] = f.listFiles();
if(null==dir){
return;
}
for(int i=0;i<dir.length;i++){
if(dir[i].getName().contains(name)){
System.out.println(dir[i]);
}
else if(dir[i].isDirectory()){
find(dir[i],name);
}
}//for
}
}
追问
我想让这个方法返回一个String。麻烦您能指出我上面的代码有什么不对的地方吗?比如说String keypath这个变量的赋值,我是不是路径的书写有问题?这段代码我测试以后,发现li.txt文件我重新放到D盘下别的某个文件夹下,程序就查找不到了。很郁闷啊。。。
追答
你没加结束判断,就是这个
if(null==dir){
return;
}
你加了就应该可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式