Java中具有相对路径的开放资源

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

这是程序结构:

/main.java
./package1/guiclass.java
./package1/resources/resourcesloader.java
./package1/resources/repository/modules/->这是我要找的目录
./package1/resources/repository/SSL Key/cert.jks->这是我需要的文件

guiclass加载resourcesloader类,该类将加载我的资源(目录和文件)

至于文件,我试过了

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

为了得到真正的路径,但这种方法不起作用

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

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

src/main/com/mycompany/myapp

然后,您可以按照maven的建议在中添加资源文件夹:

src/main/resources

此外,您还可以在resources文件夹中添加子文件夹

src/main/resources/textfiles

假设您的文件名为myfile.txt,那么

src/main/resources/textfiles/myfile.txt

这就是愚蠢的路径问题。假设您的com.mycompany.myapp包中有一个类,并且您希望从资源文件夹访问myfile.txt文件。有人说,你需要给出:

“/main/resources/textfiles/myfile.txt”路径

“/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”文件夹中的子文件夹和文件。在我看来,在“myapp/target/classes”下也可以找到“resources”文件夹是合乎逻辑的

发表评论