gpt4 book ai didi

java - 在 Java 中使用相对路径打开资源

转载 作者:IT老高 更新时间:2023-10-28 11:51:14 26 4
gpt4 key购买 nike

在我的 Java 应用程序中,我需要获取一些文件和目录。

这是程序结构:

./main.java
./package1/guiclass.java
./package1/resources/resourcesloader.java
./package1/resources/repository/modules/ -> this is the dir I need to get
./package1/resources/repository/SSL-Key/cert.jks -> this is the file I need to get

guiclass 加载将加载我的资源(目录和文件)的资源加载器类。

关于文件,我试过了

resourcesloader.class.getClass().getResource("repository/SSL-Key/cert.jks").toString()

为了得到真正的路径,但是这种方式行不通。

我不知道该目录使用哪个路径。

最佳答案

我在使用 getClass().getResource("filename.txt") 方法时遇到问题。在阅读 Java 文档说明后,如果您的资源与您尝试从中访问资源的类不在同一个包中,那么您必须为其提供以 '/' 开头的相对路径。推荐的策略是将您的资源文件放在根目录中的“资源”文件夹下。因此,例如,如果您有以下结构:

src/main/com/mycompany/myapp

然后你可以按照maven的推荐添加一个资源文件夹:

src/main/resources

此外,您可以在资源文件夹中添加子文件夹

src/main/resources/textfiles

并说你的文件被称为 myfile.txt 所以你有

src/main/resources/textfiles/myfile.txt

现在这是愚蠢的路径问题出现的地方。假设您的 com.mycompany.myapp 包中有一个类,并且您想访问 myfile.txt 资源文件夹中的文件。有人说您需要提供:

"/main/resources/textfiles/myfile.txt" path

"/resources/textfiles/myfile.txt"

这两个都是错误的。在我运行 mvn clean compile 后,文件和文件夹被复制到:

myapp/target/classes 

文件夹。但是资源文件夹不存在,只有资源文件夹中的文件夹。所以你有:

myapp/target/classes/textfiles/myfile.txt

myapp/target/classes/com/mycompany/myapp/*

所以给 getClass().getResource("") 方法的正确路径是:

"/textfiles/myfile.txt"

这里是:

getClass().getResource("/textfiles/myfile.txt")

这将不再返回 null,而是返回你的类。我希望这对某人有所帮助。我很奇怪, "resources" 文件夹也没有被复制,而只是 "resources" 文件夹中的子文件夹和文件。在我看来,"resources" 文件夹也可以在 "myapp/target/classes"

下找到

关于java - 在 Java 中使用相对路径打开资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/573679/

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