相对路径相对于当前工作目录起作用。Maven不设置它,所以它继承了它在执行代码的Java进程中的任何值。 唯一可靠的方法是在你自己的代码中找出它。根据你做事的方式,有几种方法可以做到这一点。有关建议,请参见How to get the real path of Java application at runtime?。您很可能会查看this.getClass().getProtectionDomain().getCodeSource().getLocation(),然后您就知道类文件在哪里,并且可以相对于它进行导航。
3条答案
按热度按时间6pp0gazn1#
相对路径相对于当前工作目录起作用。Maven不设置它,所以它继承了它在执行代码的Java进程中的任何值。
唯一可靠的方法是在你自己的代码中找出它。根据你做事的方式,有几种方法可以做到这一点。有关建议,请参见How to get the real path of Java application at runtime?。您很可能会查看
this.getClass().getProtectionDomain().getCodeSource().getLocation()
,然后您就知道类文件在哪里,并且可以相对于它进行导航。7jmck4yq2#
为什么报告“没有这样的文件或目录”?相对路径应该有效。对不对?
错了
你的类被编译成
$PROJECT_ROOT/target/classes
,你的资源被复制到同一个文件夹,保持它们的相对路径 * 在 *src/main/resources
下面。该文件将位于与根为
$PROJECT_ROOT/target/classes
的 classpath 相关的位置。因此,您必须在您的www.example.com中写道Pdf.java:字符串
您的相对路径将从项目 * 当前工作目录 * 计算,该目录是
$PROJECT_ROOT
(AFAIR)。但这并不重要,因为您希望它能在最终应用程序中工作,而不仅仅是在构建环境中工作。因此,您应该使用
getClass().getResource("/path/to/file/within/classpath")
访问该文件,该文件在 class path 中搜索根为$PROJECT_ROOT/target/classes
的文件。xjreopfe3#
不,引用文件的方式是根据您的文件系统。Java知道类路径而不是文件系统,如果你想引用类似的东西,你必须使用文件的完全限定名。我也不知道File构造函数是否与类路径一起工作,因为它是管理文件系统的抽象,它将取决于应用程序从哪里运行。假设它是从目标目录运行的,在同一个级别的源目录,在这种情况下,你必须先去一个目录,然后在src上,然后测试资源,文件,最后在x.pdf中。
由于您使用的是一个resources文件夹,我认为您希望该文件位于classpath中,然后您可以加载资源:
字符串
然后,您可以创建一个FileInputStream或其他东西来 Package 文件。否则,使用完全限定的名称,并将其设置为/home/{user}/files/x. pdf。