【发布时间】:2014-10-30 09:40:21
【问题描述】:
我昨天做的文件查找功能有问题,用于返回文件的方法,但它总是返回null,所以我将其更改为返回文件路径,即使不是,它仍然返回null,这是代码和输出:
public static String lookupFile(File file, String name) {
File[] list = file.listFiles();
if(list != null) {
for (File fil : list) {
String n = fil.getName().replace(name, "");
if (n.length() != 0) {
if(fil.isDirectory())
lookupFile(fil , name);
} else if (n.length() == 0) {
String g = fil.toPath().toString();
System.out.println(fil.getName());
System.out.println(g);
return g;
}
}
}
return null;
}
我的使用方式是这样的:
String n = Sys.lookupFile(new File(Sys.getAppData() + "g/"), "ggf.rtf");
System.out.println(n);
输出是这样的:
ggf.rtf
C:\Users\NAME\AppData\Roaming\g\h - Copy (5) - Copy\h - Copy (5)\ggf.rtf
null
为什么返回后会变成null?在返回字符串之前,它会打印出来,我们可以看到它不是空的,这是怎么回事?
【问题讨论】:
-
张贴全班更清楚。
-
您可以使用调试器吗?你能设置一个断点,看看到底哪里出了问题,为什么你的方法返回 null 吗?你的
list是空的,即 file.listFiles() 是否返回空?如果我完全坦率地说,这些问题是毫无意义的。他们不会教你任何东西,也没有人能帮助你。你需要设置断点,看看到底发生了什么,然后决定哪里出了问题以及如何解决它们。 -
@kha 列表不为空,你可以看到,在它返回“g”之前它会打印出来,你可以在输出中看到,它不为空,但是当我打印函数返回的值,为null。
-
@StephenC 这是我唯一的代码..
-
@ABOODYFJ 它可能返回 null,因为您正在使用递归,并且在嵌套调用中的某处返回了确切的文件名,并且由于您没有存储结果,因此您丢失了值。当您进行递归调用时,将返回的值存储在一个变量中,然后在您返回 null 时返回该变量的最后一条语句中。请参阅我的答案以供参考。
标签: java string null return-value