Java 文件路径返回';空';对于给定的位置和文件名

Java 文件路径返回';空';对于给定的位置和文件名,java,Java,有人能告诉我代码哪里错了吗?我试图在目录路径中搜索名为filename的特定文件,并试图返回filepath,但它总是返回null 以下是我正在使用的代码: public String walk( String path, String filename ) { String filePath = null; File root = new File( path ); File[] list = root.listFiles(); for ( File f : list

有人能告诉我代码哪里错了吗?我试图在目录路径中搜索名为
filename
的特定文件,并试图返回
filepath
,但它总是返回
null

以下是我正在使用的代码:

public String walk( String path, String filename ) {
String filePath = null;
    File root = new File( path );
    File[] list = root.listFiles();

    for ( File f : list ) {
        if ( f.isDirectory() ) {
            walk( f.getAbsolutePath(),filename );
           }
        else if (f.getName().equalsIgnoreCase(filename)){
            System.out.println( "File:" +f.getAbsolutePath() );
            filePath= f.getAbsolutePath();
           if(filePath.endsWith(memberPath)){
               System.out.println( "Found: Should exit");
               break;
           }
        }
     }
    System.out.println( "OUT of for:"  );
    return filePath;
}
它打印
不适用于:

 OUT of for:    

 File:d:\IM\EclipseWorkspaces\runtime-EclipseApplication\SIT\So\mmm\aaa\xxx.c

Should exit

OUT of for:

OUT of for:
我不明白为什么它仍然回到循环

编辑:更新:

我找到了另一种方法。如果出现错误,请更正:将filePath声明为静态变量

    public static void walk( String path, String filename ) {

    File root = new File( path );
    File[] list = root.listFiles();

    for ( File f : list ) {
       if ( f.isDirectory() ) {
            walk( f.getAbsolutePath(),filename );
           }
        else if (f.getName().equalsIgnoreCase(filename) && f.getAbsolutePath().endsWith(memberPath)){
             System.out.println( "Should exit");
             filePath = f.getAbsolutePath();
             break;
     }
       }

}

找到文件路径后立即返回:

if(filePath.endsWith(memberPath))
{
    return filePath;
}

您不需要具有
memberPath
的零件。将代码更改为如下所示:

public String walk(String path, String filename) {
    String filePath = null;
    File root = new File(path);
    File[] list = root.listFiles();

    for (File f : list) {
        if (f.isDirectory()) {
            walk(f.getAbsolutePath(), filename);
        } else if (f.getName().equalsIgnoreCase(filename)) {
            System.out.println("File:" + f.getAbsolutePath());
            System.out.println("Found: Should exit");
            filePath = f.getAbsolutePath();
            break;
        }
    }
    return filePath;
}
}


编辑:添加了f.getAbsolutePath().endsWith(memberPath)

memberPath来自哪里?为什么有一行代码是if(filePath.endsWith(memberPath))呢?if(filePath.endsWith(memberPath))可能是个问题——因为只有满足了这个条件,循环才会中断,哦,这是另一个问题,我看不出这是一个递归调用,请添加到if(f.isDirectory(){filePath=walk(f.getAbsolutePath(),filename)})它是一个带有文件相对路径的静态变量注意:如果您使用的是Java SE 7,建议尽可能使用新的NIO文件API:为什么您认为需要
memberPath
变量?你明白你自己的代码是做什么的吗?@user1688404这不是侮辱。问题仍然存在:想想为什么需要
memberPath
变量。它在哪里声明,在哪里设置?
memberPath
变量的用途是什么?:(这是一种侮辱..无论如何..:)方法中的路径是d:\IM\eclipseworkspace\runtime EclipseApplication\SIT,文件名是xxx.h。memberPath来自另一个本地文本文件,它为我提供了文件“\Software\mmm\aaa\xxx.h”的相对路径。我想知道的是,如果找到的xxx.h是具有相对路径的。有可能xxx.h会出现在不同的路径中PATH@user1688404你为什么不早点解释,而不是抱怨侮辱?@Jesper。我没有抱怨……它出现两次是个错误。。我试图编辑,但它不允许我编辑。。对不起,我不走运,但我找到了另一种方法。如果有什么问题,请纠正。在原始帖子中更新
public String walk(String path, String filename) {
String filePath = null;
File root = new File(path);
File[] list = root.listFiles();

for (File f : list) {
    if (f.isDirectory()) {
        // store the filePath 
        filePath = walk(f.getAbsolutePath(), filename);    
    } else if (f.getName().equalsIgnoreCase(filename) && f.getAbsolutePath().endsWith(memberPath)) {
        System.out.println("File:" + f.getAbsolutePath());
        System.out.println("Found: Should exit");
        filePath = f.getAbsolutePath();
        break;
    }
  if (filePath != null) {
    break;
  }
}
return filePath;