2016-09-22 79 views
0

我在包\'src \ main \ resources \'中有一个文件。我想读其中位于“SRC \主\ java中的\ com \ XXXX \ XXXX \ SERVICES \”。当我运行下面的代码,从Web应用程序的不同包中读取文件

File USER_DIRECTORY = new File(System.getProperty("user.dir")); 
File DOCUMENT_DIRECTORY = new File(USER_DIRECTORY, "src/test/resources"); 
File template = new File(DOCUMENT_DIRECTORY, "input.docx"); 

我得到的值一个.java文件文件的USER_DIRECTORY作为'C:\ workspace \ apache-tomcat-7.0.70 \ bin'和DOCUMENT_DIRECTORY作为'C:\ workspace \ apache-tomcat-7.0.70 \ bin \ src \ test \ resources'。目标文件不在该位置。如果我在单元测试中运行相同的代码,我会得到正确的值。有人可以帮助我如何从不同的包中读取文件吗?请让我知道是否需要更多的信息来更好地了解问题。

+0

您是否使用任何构建工具,如maven或gradle? –

+0

查找['Class.getResource()'](https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource(java.lang.String)) – qxz

+0

@ KarthikeyanVithitham是的,我正在使用maven – choom

回答

1

默认情况下,在Maven/Gradle中,src\main\resources中的资源将位于CLASSPATH中。

所以,如果你有一个在src\main\resources名为input.docx文件就可以读取文件,如下所示

File documentFile = new File(SomeClass.class.getResource("/input.docx").toURI()); 

如果该文件是在像sec\main\resources\documents下,那么使用

File documentFile = new File(SomeClass.class.getResource("/documents/input.docx")); 

注:更换SomeClass与你的班级名称。

+0

谢谢Karthikeyan Vaithilingam! 资源文件位于不同的模块中。我为documentFile获得了以下值。 '文件:/ C:/workspace/XXXXXProject/web/target/ROOT/WEB-INF/lib/docx-1.5.0-SNAPSHOT.jar /input.docx'。获取以下错误'java.lang.IllegalArgumentException:URI不是分层的' – choom

0

Maven不打包/ src/test/*中的任何类可用*
因此,在运行时,这些文件将不可用。如果你希望它们可用,你可以在maven中修改你的构建路径(但是这引发了问题,为什么?),或者可能它应该位于/ src/main/resources中

这将自动进行可用。 请参阅@Karthikeyan Vaithilingam的答案。从那里。

相关问题