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;