gpt4 book ai didi

java - Maven下找不到资源文件

转载 作者:行者123 更新时间:2023-12-02 13:29:02 26 4
gpt4 key购买 nike

我正在编写简单的应用程序,但我有点迷失了 - 这是交易:

项目结构如下:

ProjectApp
|-- pom.xml
`-- .idea
`-- src
-- main
|-- java
| `-- myapp
| |-- components
| | <some files>
| |-- controllers
| | <some files>
| |-- repositories
| | <some files>
| |-- Main.java
`-- resources
|-- database
| -- Data.csv
`-- fxml
-- Scene.fxml

正如您在资源文件夹中看到的,我有 2 个子文件夹,其中一个用于数据,另一个用于 fxml(此应用程序是简单的 JavaFX 应用程序)。现在,问题来了:

我用于加载场景的代码

String SCENE_PATH = "/fxml/Scene.fxml";
Parent root = FXMLLoader.load(getClass().getResource(SCENE_PATH));

我用于加载数据的代码(我正在使用 opencsv 库)

String DATA_PATH = "database/ClientData.csv";
ClassLoader classLoader = getClass().getClassLoader();
File dataFile = new File(classLoader.getResource(DATA_PATH).getFile());
CSVReader reader = new CSVReader(new FileReader(clientDataFile));

我希望我在这里提供了足够的上下文,如果没有,请告诉我,我将进行编辑(pom.xml 非常基本,没有什么花哨的)。现在,这可以在 IntelliJ 下运行,但是当我尝试使用 Maven 运行它时,例如:

mvn clean package
java -cp ./target/ProjectApp.jar myapp.Main

从 ProjectApp 目录,应用程序运行,但我得到 FileNotFoundException (它加载 fxml 文件,但没有 csv 文件 - 我得到工作应用程序,但无法访问数据)。另外,为什么在访问 fxml 文件时我必须在路径开头提供(如果不是 NullPointerException)“/”,但是当我访问 csv 文件时我不能这样做(因此路径“/database/ClientData.csv”会导致空指针异常)?

@编辑

实际上问题似乎出在打包上 - 当我将应用程序打包到 jar 文件时,它会在路径中添加感叹号,因此路径不正确(或者至少我认为是这样)。

最佳答案

accessing csv files I must not do that (so path "/database/ClientData.csv" results in NullPointerException)

因为当您尝试从 getClass().getClassLoader() 加载资源时,它不会采用以 / 开头的路径

why when accessing fxml files I must provide (NullPointerException if not) "/" at the beginning of the path

因为如果您没有在文件 [fxml/Scene.fxml] 的开头提供 / ,它将尝试从调用该方法的类的包中进行定位,这将类似于 myapp/controller/ClassName... 等,因此它将无法加载资源。

但是当您在文件 [fxml/Scene.fxml] 开头提供 / 时,它将尝试从类路径的根目录进行定位,因此它会成功定位

关于java - Maven下找不到资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43264624/

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