【问题标题】:Java Getting Null when doing class.getResource on empty directoryJava在空目录上执行class.getResource时获取Null
【发布时间】:2018-02-04 23:15:15
【问题描述】:

我正在编写一个 Spring Maven Web 应用程序。 在我的代码中,我试图对位于类路径的文件和目录进行各种操作。

例如-在sn-p下面获取目录中的所有文件

{
    URL resource = FileUtil.class.getResource(inboxLocation); //getting null when directory is empty
    File directory = new File(resource.getPath());
    Collection<File> files = FileUtils.listFiles(directory, TrueFileFilter.TRUE, null);
    ArrayList<File> fileArray = new ArrayList<>(files);
    return fileArray.subList(0, Math.min(batchSize, fileArray.size()));
}

当 inboxLocation(a directory) 已经有一个文件时,这可以正常工作。 但是当收件箱位置为空时,我的资源为空。

还有另一个功能,我尝试将文件移动到目录.. 当目录为空时,即使该方法也会失败。

我使用 IntelliJ 作为开发平台。

任何人都可以帮助如何处理这种情况.. 任何帮助表示赞赏

【问题讨论】:

  • IntelliJ 与您的问题无关。您应该考虑流,而不是文件。您的网络应用不应依赖于对文件系统的访问。
  • 我同意.. 我这样做只是为了设置正确的测试环境
  • 为什么必须使用getResource 来获取File 对象?
  • 我的应用程序在某种程度上模拟了文件系统上的 SMTP。所以对于单元测试,我试图在类路径中使用临时文件夹。因此,为了通过类路径访问目录,我使用了 getResource... 这有助于从相对类路径和绝对位置读取......

标签: java spring maven intellij-idea


【解决方案1】:

getResource 的目的是read resources from a JAR file。注意a resource is data (images, audio, text, and so on),目录不是资源。

使用Files.walk 获取目录条目流。

【讨论】:

  • 隐含的限制不正确。链接的资源正在讨论 Web 容器上下文中的资源加载,因此所涉及的类加载器自然是 Web 容器的,并且将搜索每个 JEE 标准的 jar、war 或 ear 档案。见Class#gerResource
猜你喜欢
  • 2016-03-08
  • 2020-03-27
  • 1970-01-01
  • 2013-03-12
  • 2012-01-13
相关资源
最近更新 更多