从Web应用程序的不同包中读取文件
我在包\'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'。目标文件不在该位置。如果我在单元测试中运行相同的代码,我会得到正确的值。有人可以帮助我如何从不同的包中读取文件吗?请让我知道是否需要更多的信息来更好地了解问题。
默认情况下,在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
与你的班级名称。
谢谢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
Maven不打包/ src/test/*中的任何类可用*
因此,在运行时,这些文件将不可用。如果你希望它们可用,你可以在maven中修改你的构建路径(但是这引发了问题,为什么?),或者可能它应该位于/ src/main/resources中
这将自动进行可用。 请参阅@Karthikeyan Vaithilingam的答案。从那里。
您是否使用任何构建工具,如maven或gradle? –
查找['Class.getResource()'](https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource(java.lang.String)) – qxz
@ KarthikeyanVithitham是的,我正在使用maven – choom