我有一个文件包' \ 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'。目标文件不在该位置。如果我在单元测试中运行相同的代码,我会得到正确的值。有人可以帮我如何从不同的包中读取文件?如果需要其他信息以便更好地了解问题,请与我们联系。
答案 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的回答。从那里。