2016-01-25 239 views
1

我正在从位于target/[projectname]/WEB-INF/classes/的(maven)生成的文件中读取信息。 Eclipse没有向我显示路径,但是,我无法在WEB-INF中创建名为classes的新文件夹(因为已有一个文件夹)。系统找不到指定的路径

我可以通过命令行找到该文件夹​​和文件,但是,我无法为该文件创建一个FileInputStream

但是,我可以访问位于target的其他文件,例如,在每次构建期间已生成的target/maven-archiver/pom.properties。唯一的区别是我可以在Eclipse中看到该文件。

该项目是GWT之一,并用maven构建。我没有看到Java无法找到路径的任何原因。

我正在访问的文件是version.properties。我可以看到它在浏览器(项目名称被涂黑):

File Location

我试着通过

private static final String PATH = "target/[projectname]/WEB_INF/classes/version.properties"; 

public static String getVersion() { 
    String version; 
    Properties prop = new Properties(); 
    File resource = new File(PATH); 
    try { 
     prop.load(new FileInputStream(resource)); 
     version = prop.getProperty("build.time"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     version = "01.01.2016 00:00"; 
    } 
    return version; 
} 

的例外,我去打开该文件是

java.io.FileNotFoundException: target\[projectname]\WEB_INF\classes\version.properties (Das System kann den angegebenen Pfad nicht finden) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:138) 
at [projectname].utils.VersionUtils.getBuildTime(VersionUtils.java:31) 
[...] 
+0

为什么你需要从你的代码访问目标目录? – Ferrybig

+0

@Ferrybig由于该文件是自动生成的,因此只能在此处生成的输出中使用(包含使用'$ {propertyName}'指定的maven属性)。 – LordAnomander

+0

@LordAnomander你可能会更成功地使用getClass()。getResource(“\ version.properties”),因为你的代码似乎被编译成某种容器,但我不确定格式 – Ferrybig

回答

1

你这样做完全错了。

version.properties是您的应用程序的资源位于src/main/resources内。当你有最终的WAR时,这个文件将在你的应用程序的类路径中。这是因为Maven会将这个资源放在WAR的文件夹WEB-INF/classes内。您不访问路径为target/...src/main/...的文件。这是Eclipse/Maven的考虑。一旦你有最后的战争,target甚至不存在了。

其次,您不能作为File对象访问资源。您必须改为获取资源的InputStream

结合了这一切,你应该有:

prop.load(VersionUtils.class.getResourceAsStream("/version.properties"));‌​ 

getResourceAsStream的路径是,要么是相对于当前类的位置,或绝对到classpath的路径。在这种情况下,资源位于类路径的根目录,因此我们只使用"/version.properties"

相关问题