【问题标题】:Why is my getString() method always returning null?为什么我的 getString() 方法总是返回 null?
【发布时间】: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


【解决方案1】:

您在控制台中获得的null 作为lookupFile() 的结果返回(代码最终到达最后的return null 语句)。调试方法,看看为什么会这样,检查你的 if/else 条件。

【讨论】:

    【解决方案2】:

    这样试试

    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;
    }
    

    【讨论】:

      【解决方案3】:

      通过添加一个新函数和一个静态变量来修复它,就像这样:

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-12
        • 2019-09-18
        • 2014-09-02
        • 2015-02-27
        • 2021-01-10
        相关资源
        最近更新 更多