系统无法找到指定的路径

时间:2016-01-25 13:15:15

标签: java eclipse file maven

我正在从位于.f90.o: ${FF90} ${FFLAGS} -c $< .c.o: ${CC} ${CFLAGS} -I$(SAM_SRC)/TIMING $(NOTIMERS) -c $< 的(maven)生成文件中读取信息。 Eclipse没有向我显示路径,但是,我无法在target/[projectname]/WEB-INF/classes/中创建名为classes的新文件夹(因为已经存在一个)。

我可以通过命令行找到文件夹和文件,但是,我无法为该文件创建WEB-INF

但是,我可以访问FileInputStream中的其他文件,例如target,这些文件已在每次构建期间生成。唯一的区别是我可以在Eclipse中看到该文件。

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

我正在访问的文件是target/maven-archiver/pom.properties。我可以在资源管理器中看到它(项目名称被涂黑):

File Location

我尝试通过

打开文件
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;
}

1 个答案:

答案 0 :(得分:1)

你这样做完全错了。

version.properties是位于src/main/resources内的应用程序的资源。当您拥有最终WAR时,此文件将位于应用程序的类路径中。这是因为Maven会将此资源放在WAR的文件夹WEB-INF/classes中。您不能使用路径target/...src/main/...访问此文件。这是Eclipse / Maven的考虑因素。一旦你获得了最终的WAR,target就不再存在了。

其次,您无法将资源作为File对象进行访问。您必须获得InputStream资源。

结合所有这些,你应该:

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

赋予getResourceAsStream的路径是相对于当前类的位置的路径,或者是类路径的绝对路径。在这种情况下,资源位于类路径的根部,因此我们只使用"/version.properties"