提问人:PuneethC99 提问时间:7/1/2023 最后编辑:jithinkmatthewPuneethC99 更新时间:7/14/2023 访问量:67
File.list() 在 Java 中返回 null - Springboot
File.list() returns null in Java - Springboot
问:
我有以下代码
File folder = new File("./src/main/resources/uploads");
LOGGER.info("Read folder - {}", folder.getName()); // prints uploads correctly
folder.setReadable(true, false);
folder.setWritable(true, false);
String[] directories = folder.list();
System.out.println(directories.length)// throws an NPE here.
我的代码在我的 Windows 机器上工作正常,但在我的 UNIX 环境中因 NPE 而失败。 我在这里做错了什么吗?
我尝试了使用和不使用以下代码
folder.setReadable(true, false);
folder.setWritable(true, false);
Uploads 绝对是我手动创建的目录。此外,它在我的本地机器上运行良好。
提前致谢。
答:
毫无疑问,问题的根本原因是显而易见的。您告诉它列出的目录不存在...在执行平台上......与该相对路径名...相对于执行应用程序的当前目录进行解析时。
有几条线索可以解释为什么会这样:
Java 说它不存在!javadocs 表示,如果路径名表示的对象不存在、不可读或不是目录,则返回。
Files.list()
null
您的路径名似乎是相对于您的项目目录指定的。当您尝试在另一台计算机上运行(例如)应用程序的 JAR 时,该项目目录将不存在。即使它在那里,您(或其他用户)在运行 JAR 之前也很可能没有“d”到该目录。
cd
现在我不确定该目录的目的是什么。但是把它放在“/src/resources”树中可能是一个错误......甚至在开发平台上。download
为什么?因为“资源”树中的文件(通常)将合并到构建工具生成的 JAR(或 WAR 或其他)文件中。
您的问题中没有足够的上下文来为您提供最合适的解决方案。一种替代方法是将下载目录的位置设置为部署或运行应用程序的人员可以修改的配置参数。
此外,建议使用 和 API 而不是旧版 API。如果出现问题,前者将抛出异常,并显示信息性异常消息。例如,失败的“列表”的消息会告诉您问题是路径不正确,对象无法访问或不是目录。无需猜测。Files
Path
File
使用 ResourceLoader 为我解决了这个问题。
评论
folder.getAbsolutePath()
folder.getName()
setReadable
exists()
src
MyClass.class.getResource
File