1

我编写了一个完全基于单个文本文件的程序:我读取文件,存储信息,然后搜索信息等。因此,要使程序工作,文件必须存在并且程序可以检测到. 我用的是eclipse,所以我把文件放在了默认的资源映射(src/main/resources)中。在我的程序开始时,我创建了文件:

private static File textFile = new File("src/main/resources/TEXT.TXT")

但是,当我尝试使用 Maven 打包我的程序时,我得到一个 JAR,其中所有类和资源文件都存在于同一个文件夹中;我的程序停止工作,因为它再也找不到文件了。

有关如何处理此问题的任何帮助?我更喜欢我的程序在 Eclipse 和 JAR 中工作的情况,但只作为 JAR 也可以。

4

2 回答 2

3

您可以使用ClassLoader.getResourceAsStream从类路径加载它(或使用getResource来获取文件的 URL)。

Thread.currentThread().getContextClassLoader().getResource("TEXT.TXT")

只要src/main/resources位于 Eclipse 的类路径上,这就会起作用。(maven eclipse 插件默认包含它。)该文件必须在 jar 文件中才能在 eclipse 之外工作。

于 2009-11-25T11:17:46.210 回答
0

很好的建议,这在 Eclipse 本身中非常有效:返回文件的正确位置,我可以使用该文件做任何我喜欢的事情。将程序作为jar打开时,仍然存在问题。getResource 方法返回一个看起来像正确的位置:

/something/something/something/something/workspace/program/target/program-0.0.1.jar!/TEXT.TXT。

但是,当我将此 url 转换为字符串时,使用该字符串创建一个文件对象并在我的程序中使用此文件对象,我收到以下错误:

java.io.FileNotFoundException: file:/something/something/something/something/workspace/program/target/program-0.0.1.jar!/TEXT.TXT (没有这样的文件或目录)

因此,getResource 方法确实找到了该文件,但程序不知何故无法使用它。

于 2009-11-26T14:09:03.013 回答