【问题标题】:Java : access project directory outside srcJava:访问 src 之外的项目目录
【发布时间】:2017-10-29 22:47:08
【问题描述】:

我想从文件夹ressources/images/ 中检索文件,所以我在我的Main.java 中执行此操作:

URL url = getClass().getClassLoader().getResource("../ressources/images/");
File folder = new File(url.getFile());

File[] listOfFiles = folder.listFiles();

这是整个项目的层次结构

   myGame
      - ressources
          -- images
              --- image1.jpg
              --- image2.jpg
              --- image3.jpg
      - src
          -- dvt
             --- Main.java

但我在第 2 行收到此错误:

线程“JavaFX 应用程序线程”中的异常 java.lang.NullPointerException

所以我认为它找不到目录。

使用绝对路径可以正常工作,但不能使用相对路径:

    File folder = new File("D:\\courses\\UE4\\projet2\\ressources\\images\\");

【问题讨论】:

  • 你的resources 目录中真的有双's'吗?
  • 是的,它是法语 :)
  • 好的,只是想验证一下不是错字。
  • @Takichiiii ressources 目录比Main.java 高2 级,而不仅仅是一层。你试过.getResource("../../ressources/images/");吗?
  • 你为什么要使用相对路径?

标签: java url nullpointerexception resources directory


【解决方案1】:
File folder = new File(System.getProperty("user.dir")+"/ressources/images");
File[] listOfFiles = folder.listFiles();

System.getProperty("user.dir") 是项目文件夹,在你的例子中是 myGame 只需附加remaning路径,它就会工作

【讨论】:

    【解决方案2】:

    “资源”只是您帖子中的拼写错误,还是文件夹的实际名称?

    另外,形式结构通常是

      myGame
          - src
              -- main
                --- java
                   ---- Main.java
              -- resources
                --- images
                  ---- image1.jpg
                  ---- image2.jpg
                  ---- image3.jpg
    

    您得到的 NPE 是因为 url 在第 2 行为空。

    这对我来说没问题:

    URL url = getClass().getClassLoader().getResource("images");
    File folder = new File(url.getFile());
    File[] listOfFiles = folder.listFiles();
    

    【讨论】:

    • 不,这根本不是我的问题的解决方案,我想使用我给出的严格结构,改变问题陈述不是解决问题的方法。阅读主题名称:“访问src外的项目目录”
    • 抱歉,我仔细查看了您的整个帖子,但没有注意标题。杰。我们需要一个新的角度。如果你想使用 getClassLoader(),我们需要手动将你的 /ressources/ 文件夹添加到类路径中,或者使用与 getClassLoader() 不同的东西
    【解决方案3】:
    File folder = new File("ressources/images");
    File[] listOfFiles = folder.listFiles();
    

    文件夹“ressources”被放置在与应用程序相同的级别,所以这应该可以工作。但是您使用的是 java maven 约定,将源放在 src/main/java 和资源放在 src/main/resources 但名称不同,我猜没有构建工具。很奇怪。

    【讨论】:

    • 我之前尝试过(cf 其他 cmets),但没有成功。我有义务严格使用这个层次结构,它不是一个 Maven 项目。
    • 此解决方案有效。我已经试过了。但是在运行游戏时,ressources 文件夹必须与可执行 jar 放在同一级别
    • 不,这根本不是我的问题的解决方案,我想严格使用我给出的结构,即在ressources 之外有src。改变问题陈述不是解决问题的方法。
    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2021-06-02
    相关资源
    最近更新 更多