gpt4 book ai didi

java - 为什么我的/src/main/resources 下的文件在执行时不可读?

转载 作者:行者123 更新时间:2023-12-02 07:50:28 25 4
gpt4 key购买 nike

我有一个 Java 项目,并使用标准 Maven 原型(prototype)来创建 dir 结构。它看起来像这样:

|-src/main/java 
|-src/main/resources
|-target/classes
|- ...

现在我的一个类使用 .properties 文件来读取某些设置。我将其放在 src/main/resources 中,并通过 File propertiesFile = new File("./src/main/resources/starter.properties"); 读取它。
当我使用 eclipse 运行配置时,一切正常。但最近我尝试使用 java some.package.Class 从控制台启动相同的 Java 类,并且由于 .class 文件位于 target/classes 中,我收到了消息,即 ./找不到 src/main/resources/starter.properties。

我究竟做错了什么? .properties 文件是否不应位于资源文件夹中,或者我是否必须使用其他方式来加载它?

最佳答案

前面的两个答案是正确的,但我想提供更多背景信息。

该文件位于两个位置。它从/src/main/resources 开始,当您构建项目时,Maven 将其复制到/target/classes。

在运行时,您不应访问源代码中的副本。否则,您的软件需要访问源代码才能运行。相反,您应该访问可交付成果中的副本。在执行时,您可以放心地假设您将在类路径中找到它。它与编译的类位于同一位置,因此如果它不在类路径上,您将无法首先运行该程序。这就是为什么您应该使用其他回答者提到的 getResourceAsStream() 的原因。

(尽管对于生产软件,我确实推荐 Spring 的资源抽象来访问这些类型的东西。)

关于java - 为什么我的/src/main/resources 下的文件在执行时不可读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8681053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com