Java 为什么我的getString()方法总是返回null?
我昨天做的文件查找函数有一个问题,该方法用于返回文件,但它总是返回null,因此我将其更改为返回文件路径,即使不是,它仍然返回null,下面是代码和输出:Java 为什么我的getString()方法总是返回null?,java,string,null,return-value,Java,String,Null,Return Value,我昨天做的文件查找函数有一个问题,该方法用于返回文件,但它总是返回null,因此我将其更改为返回文件路径,即使不是,它仍然返回null,下面是代码和输出: public static String lookupFile(File file, String name) { File[] list = file.listFiles(); if(list != null) { for (File fil : list) { String n =
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
为什么它在返回后会变为空?在返回字符串之前,它会将其打印出来,我们可以看到它不是空的,那么有什么问题吗?您在控制台中得到的空值作为lookupFile的结果返回,代码最终返回到最终的return null语句。调试该方法并查看为什么会发生这种情况,检查if/else条件。像这样尝试
public static String lookupFile(File file, String name) {
File[] list = file.listFiles();
String returnValue = null;
if(list != null) {
for (File fil : list) {
String n = fil.getName().replace(name, "");
if (n.length() != 0) {
if(fil.isDirectory())
returnValue = 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 returnValue;
}
通过添加一个新函数和一个静态变量进行修复,如下所示:
private static String gg = null;
public static File lookup(File file, String name) {
gg = null;
return new File(lookupFile(file, name));
}
private 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);
gg = g;
return gg;
}
}
}
return gg;
}
发布完整的类以使其更清晰。您有权访问调试器吗?你能不能设置一个断点,看看哪里出了问题,为什么你的方法返回null?列表是否为空,即file.listFiles是否返回空?如果我完全坦率的话,这些问题是毫无意义的。他们不会教你任何东西,也没有人能帮助你。你需要输入断点,看看到底发生了什么,然后决定哪里出了问题以及如何修复它们。@kha列表不是空的,你可以看到,在它返回g之前,它会打印出来,你可以看到在输出中,它不是空的,但是当我打印函数返回的值时,它是null。@StephenC这是我仅有的代码。@ABOODYFJ它可能返回null,因为您使用的是递归,确切的文件名在嵌套调用中的某个地方返回,并且由于您没有存储结果,所以丢失了值。进行递归调用时,将返回的值存储在变量中,然后在返回null时的最后一条语句中返回该变量。请参考我的答案。