我有一个带有这些标准目录结构的maven项目:
的src /主/ JAVA
的src /主/爪哇/ PDF / Pdf.java
的src /测试/资源
的src /测试/资源/文件/ x.pdf
在我的Pdf.java中,
query.addAggregation(terms("errors").field("errors.code").size(NUMBER_OF_HITS).order(Terms.Order.count(false)));
^
|
add this
为什么报告"没有这样的文件或目录"?相对路径应该有效。正确?
答案 0 :(得分:0)
相对路径相对于当前工作目录起作用。 Maven没有设置它,所以它继承自你的代码执行的Java进程中的任何值。
唯一可靠的方法是在自己的代码中弄明白。根据您的工作方式,有几种方法可以做到这一点。有关建议,请参阅How to get the real path of Java application at runtime?。您最有可能查看this.getClass().getProtectionDomain().getCodeSource().getLocation()
,然后您知道类文件的位置,并且可以相对于该文件进行导航。
答案 1 :(得分:0)
为什么报告“没有这样的文件或目录”?相对路径应该有效。正确?
错误。
您的课程已编译为$PROJECT_ROOT/target/classes
并将您的资源复制到同一文件夹,保持其相对路径低于 src/main/resources
。
<击>
该文件将相对于类路径定位,其根目录为$PROJECT_ROOT/target/classes
。因此,你必须写下你的Pdf.java:
File file = new File("/files/x.pdf");
您的相对路径将从项目当前工作目录评估,即$PROJECT_ROOT
(AFAIR)。
但这并不重要,因为您希望它在您的最终应用程序中工作,而不仅仅是在您的构建环境中。因此,您应该使用getClass().getResource("/path/to/file/within/classpath")
访问该文件,该文件会搜索根目录为$PROJECT_ROOT/target/classes
的类路径中的文件。
答案 2 :(得分:0)
根据您的文件系统,没有引用文件的方式。如果你想引用类似的东西,你必须使用文件的完全限定名称,Java知道类路径而不是文件系统。 此外,我不知道File构造函数是否适用于类路径,因为它是管理文件系统的抽象,它将取决于运行应用程序的位置。假设它是从与源相同级别的目标目录运行的,在这种情况下你必须先上一个目录,然后在src上然后测试资源文件,最后在x.pdf中。
由于您使用的是资源文件夹,我认为您希望该文件位于类路径上,然后您可以使用以下命令加载资源:
InputStream in = this.getClass().getClassLoader()
.getResourceAsStream("<path in classpath>");
然后,您可以创建一个FileInputStream或其他东西来包装文件。否则,请使用完全有资格的名称,并将其设置为/home/{user}/files/x.pdf。