获取当前文件的目录

时间:2019-11-12 13:30:49

标签: java

我有两个项目:A和B。项目B有一个maven插件,当执行该插件时,它应该带有一些模板,这些模板是项目A的资源。

模板位于 C:/ path / to / project / A / module1 / src / main / resources / templates

检索这些模板的方法使用速度引擎,并且该方法位于 C:/ path / to / project / A / module1 / src / main / java 中的类中。我为模板使用以下路径:

String path = new File( "" ).getAbsolutePath() + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "templates" + File.separator;

在我的单元测试中,此路径等于 C:/ path / to / project / A / module1 / src / main / resources / templates ,但是当我从Project B运行maven插件时,此路径等于 C:/ 路径/到/项目/ B / module1 / src / main / resources / templates 。我意识到这是因为我是从项目B启动的。我知道是否将模板放在项目B中可以正常工作,但这不是我想要的。

我想实现的是让路径始终等于 C:/ path / to / project / A / module1 / src / main / resources / templates 。但是,由于其他人也正在使用该项目,并且他们进入项目A的路径很可能与我的不同,所以我不能做

String path = "C:/path/to/project/A/module1/src/main/resources/templates"

因此,我想保留第一部分,以便找到到项目A的路径,然后是“ src / main / resources / templates”。这可能吗?如果可以,怎么办?

编辑要澄清:我想要的是从项目A内的方法A1获取项目A的路径。当我运行方法A1时也应找到此项目A的路径从项目B中获取。我现在如何获取路径的问题是,当我从项目B运行方法A1时,便获得了到达项目B的路径。

解决方案,当我使用ClasspathResourceLoader(而不是FileResourceLoader)时,它可以正常工作。

2 个答案:

答案 0 :(得分:1)

我并没有完全理解您的问题,但是使用Path类时可以获取Path的目录部分。

看看

Path java.nio.file.Path.getName(int index)

int java.nio.file.Path.getNameCount()

答案 1 :(得分:1)

我认为将其放入您的项目A类应该可以解决问题:

String projectApath = MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String path = projectApath + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "templates" + File.separator;

MyClass必须替换为方法所在的类名称。

这将指向您的Maven本地存储库,因此您必须使用模板导出Project A,以便在将其加载到Project B上时,模板将被提取到Local Maven Repo中。这可以通过ClasspathResourceLoader完成。