从Web应用程序中的不同包中读取文件

时间:2016-09-22 04:27:58

标签: java tomcat

我有一个文件包' \ src \ main \ resources \'。我想在.java文件中读取该文件,该文件位于&s; src \ main \ java \ com \ xxxx \ xxxx \ services \'。当我运行以下代码时,

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" );

我将USER_DIRECTORY的值变为' C:\ workspace \ apache-tomcat-7.0.70 \ bin'和DOCUMENT_DIRECTORY为' C:\ workspace \ apache-tomcat-7.0.70 \ bin \ src \ test \ resources'。目标文件不在该位置。如果我在单元测试中运行相同的代码,我会得到正确的值。有人可以帮我如何从不同的包中读取文件?如果需要其他信息以便更好地了解问题,请与我们联系。

2 个答案:

答案 0 :(得分:1)

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

因此,如果input.docx中有一个名为src\main\resources的文件,您可以按如下方式阅读该文件

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替换为您的班级名称。

答案 1 :(得分:0)

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

这将自动生效。 另见@Karthikeyan Vaithilingam的回答。从那里。