Java 使用gradle将外部配置文件添加到jar
我有两个外部文件要添加到jar文件中,并在类中访问这些文件。我使用Java 使用gradle将外部配置文件添加到jar,java,gradle,build.gradle,Java,Gradle,Build.gradle,我有两个外部文件要添加到jar文件中,并在类中访问这些文件。我使用java-jar命令从命令行运行这个jar文件。因此,当我使用绝对路径时,我可以访问文件内容,但当我使用相对路径时,我得到java.io.IOException:(没有这样的文件或目录)。我已将这两个文件都包含在src/main/resorces目录中。我试过使用file.conf、/file.conf、/file.conf,但都不起作用。还尝试在build.gradle中包含文件 来自{ [“file1.conf”、“file2
java-jar
命令从命令行运行这个jar文件。因此,当我使用绝对路径时,我可以访问文件内容,但当我使用相对路径时,我得到java.io.IOException:(没有这样的文件或目录)
。我已将这两个文件都包含在src/main/resorces
目录中。我试过使用file.conf、/file.conf、/file.conf
,但都不起作用。还尝试在build.gradle中包含文件来自{
[“file1.conf”、“file2.conf”]
}
知道如何使用文件的相对路径访问java代码中的文件内容吗?如果我理解正确,您希望访问驻留在类路径中的文件。这些文件将与您的应用程序打包在一起,您知道它们的名称。如果这是正确的,并且您并不特别需要
java.io.File
,而是需要一种接受文件内容的方法,那么我建议:
try (InputStream is = MyClass.class.getResourceAsStream("/file.conf")) {
// do something with the input stream
}
如果愿意,还可以检索文件的java.net.URL
简而言之,字符串属性的语法如下所示:
- 如果属性以
开头,则从类路径的根解析名称。例如,如果运行/
,file.conf必须位于hello.jar的根目录下java-jar hello.jar
- 如果属性不是以
开头,则名称将相对于调用/
方法的类进行解析getResourceAsStream()
查看以获取更多信息。我尝试了
URL=ClassLoader.getSystemClassLoader().getResource(“file.conf”)
和url.getPath()
但不起作用。我仍然得到(没有这样的文件或目录)
。我确实在jar的根目录下看到了我的文件。它在Eclipse中运行良好,但在使用java-jar
命令时运行不正常代码>我创建了一个属性文件,它工作了。但它不适用于.conf文件。因此,我通过url.getPath()
打印了file.conf的路径。它显示的内容类似于/Users/user/Desktop/workspace/project/build/libs/myProject-all-1.0.jar/file.conf
。是吗!在罐子之后,对吗?但是,当我从Eclipse打印该路径时,它会显示文件的正确路径,即。/../Desktop/workspace/myProject/bin/file.conf
!对于内嵌在JAR中的资源来说,这是相当标准的。这应该是你的目标。Eclipse给出的路径引用JAR外部的资源。