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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用递归的方法获得指定文件夹下某个指定文件的完整路径?我自己写了段代码,但是有些问题,请指教相关的知识,希望对你有一定的参考价值。

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 "找不到指定的文件!";


这段代码编译后,我发现时而能找到指定的文件,但是有时候又找不到,搞不清楚哪里出问题了,能帮忙详细分析一下吗?请不要从别的地方搬代码过来,我自己也看过一些例子,还请就根据我现在的代码给出修正。不胜感激。

参考技术A 我自己写的一个递归 希望对你有忙住:
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 "找不到系统文件";



这样就可以了 呵呵

本回答被提问者采纳
参考技术B 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;

你加了就应该可以了。

以上是关于如何使用递归的方法获得指定文件夹下某个指定文件的完整路径?我自己写了段代码,但是有些问题,请指教的主要内容,如果未能解决你的问题,请参考以下文章

java 如何递归遍历多重目录下的指定格式文件复制到目标目录并改格式

java怎样获得某个目录下所有文件的文件名

遍历指定目录获得文件名或者文件夹名称,或者两则都要

使用java递归方法遍历指定目录下所有子目录和子文件

递归查找目录下所有指定文件(包括深层目录)

Unity 获取指定路径文件夹下所有文件集合(递归写法)