我编写了一个完全基于单个文本文件的程序:我读取文件,存储信息,然后搜索信息等等。因此,要使程序正常工作,文件必须存在且可检测通过该计划。 我使用eclipse,所以我把文件放在默认资源图(src / main / resources)中。在我的程序开始时,我创建了文件:
private static File textFile = new File("src/main/resources/TEXT.TXT")
然而,当我尝试使用Maven打包我的程序时,我得到一个JAR,其中所有类和资源文件都存在于同一个文件夹中;我的程序停止工作,因为它找不到文件了。
有关如何处理此问题的任何帮助?我更喜欢我的程序在eclipse和JAR中工作的情况,但作为JAR只会是正常的。
答案 0 :(得分:3)
您可以使用ClassLoader.getResourceAsStream从类路径加载它(或getResource以获取文件的URL)。
Thread.currentThread().getContextClassLoader().getResource("TEXT.TXT")
只要 src / main / resources 位于eclipse的类路径中,就可以正常工作。 (maven eclipse插件默认包含它。)文件必须在jar文件中才能在eclipse之外工作。
答案 1 :(得分: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方法确实找到了该文件,但该程序不知何故无法使用它。