Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的getString()方法总是返回null?_Java_String_Null_Return Value - Fatal编程技术网

Java 为什么我的getString()方法总是返回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 =

我昨天做的文件查找函数有一个问题,该方法用于返回文件,但它总是返回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
为什么它在返回后会变为空?在返回字符串之前,它会将其打印出来,我们可以看到它不是空的,那么有什么问题吗?

您在控制台中得到的空值作为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时的最后一条语句中返回该变量。请参考我的答案。