Java 系统找不到指定的路径
我正在从一个(maven)生成的文件中读取信息,该文件位于Java 系统找不到指定的路径,java,eclipse,file,maven,Java,Eclipse,File,Maven,我正在从一个(maven)生成的文件中读取信息,该文件位于target/[projectname]/WEB-INF/classes/。Eclipse没有向我显示路径,但是,我无法在WEB-INF中创建名为classes的新文件夹(因为已有一个文件夹) 我可以通过命令行找到文件夹和文件,但是,我无法为该文件创建FileInputStream 但是,我可以访问位于target中的其他文件,例如,target/maven archiver/pom.properties,这些文件在每次构建过程中都已生成
target/[projectname]/WEB-INF/classes/
。Eclipse没有向我显示路径,但是,我无法在WEB-INF
中创建名为classes
的新文件夹(因为已有一个文件夹)
我可以通过命令行找到文件夹和文件,但是,我无法为该文件创建FileInputStream
但是,我可以访问位于target
中的其他文件,例如,target/maven archiver/pom.properties
,这些文件在每次构建过程中都已生成。唯一的区别是我可以在Eclipse中看到该文件
该项目是一个GWT项目,由maven构建。我看不出Java找不到路径的任何原因
我正在访问的文件是version.properties
。我可以在资源管理器中看到它(项目名称为黑色):
我试图通过
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)
[...]
java.io.FileNotFoundException:target\[projectname]\WEB\u INF\classes\version.properties(Das系统kann den angegebenen Pfad nicht finden)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:138)
位于[projectname].utils.VersionUtils.getBuildTime(VersionUtils.java:31)
[...]
你完全错了
version.properties
是位于src/main/resources
中的应用程序资源。当您完成最后一场战争时,此文件将位于应用程序的类路径上。这是因为Maven将把这个资源放在WAR的文件夹WEB-INF/classes
中。您不能使用路径target/..
或src/main/..
访问此文件。这是Eclipse/Maven考虑的问题。一旦你有了最后一场战争,target
就不再存在了
其次,您不能作为文件
对象访问资源。您必须获得资源的InputStream
结合所有这些,您应该具备:
prop.load(VersionUtils.class.getResourceAsStream("/version.properties"));
给定给
getResourceAsStream
的路径是相对于当前类位置的路径,或者是相对于类路径的绝对路径。在本例中,资源位于类路径的根目录,因此我们只使用“/version.properties”
为什么需要从代码访问目标目录?@Ferrybig,因为文件是自动生成的,因此仅在此处生成的输出可用(包含用指定的maven属性)${propertyName}
)。@LordAnomander使用getClass().getResource(“\version.properties”)可能会更成功,因为您的代码似乎被编译成某种容器,但我不确定format@user2004685-您认为路径src/main/webapp/WEB-INF/classes/version.properties
在生产环境中运行时有效吗?;-)@user2004685-ClassPathResource(“version.properties”)如果version.properties
与执行new ClassPathResource()
的类位于同一个包中,则使用/version.properties
(如果它属于rrot)。但是src/main/webapp
不是类路径的一部分。