gpt4 book ai didi

java - 从 jar 或类路径中的任何位置读取文件?

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:14 27 4
gpt4 key购买 nike

我正在尝试构建一个将资源文件构建到 jar 中的应用程序,但我希望该项目可以在 eclipse 中运行。我的项目有一个基本的 maven 2 结构,我不确定如何读入文件,以便在从 JAR 或从 eclipse 运行时找到和使用它。思想?

结构:

src/main/java
src/main/resources/file.txt

电流读取方法:

getClass().getResourceAsStream("/file.txt")

是否有读取 src/main/resources/* 以及 JAR 的根级别(部署资源的位置)的读取方法?

最佳答案

我不明白你的问题。 src/main/resources 中的资源会自动复制到 target/classes 中,因此在 Maven 和 Eclipse 下的类路径中相对于同一位置的根级别可用(除非您的 Eclipse 项目配置不正确)。

当打包到 JAR 中时,target/classes 的内容将“按原样”打包,因此没有任何更改。

换句话说,像这样访问您的 file.txt 完全没问题(这实际上是 how things are documented ):

// Retrieve resource
InputStream is = getClass().getResourceAsStream( "/file.txt" );

// Do something with the resource

...

如果你有什么地方有问题,请澄清。

更新:我使用 maven-eclipse-plugin 进行了快速测试,但无法重现您的问题:

$ mvn archetype:generate -DgroupId=com.stackoverflow -DartifactId=q2467362 -Dversion=1.0-SNAPSHOT
...
$ cd q2467362
$ mkdir -p src/main/resources
$ mvn eclipse:eclipse
...
$ cat .classpath
<classpath>
<classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/>
<classpathentry kind="src" path="src/main/java" including="**/*.java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
<classpathentry kind="output" path="target/classes"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>

src/main/resources 目录按预期添加为源文件夹。你能展示你的 POM(特别是 resources 元素,如果你定义了一个)吗?

关于java - 从 jar 或类路径中的任何位置读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2467362/

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