我在Windows上运行Java 8应用程序。我想在不使用绝对路径的情况下在我的Java项目中找到一个文件。从命令提示符运行我的应用程序时,以下代码有效:System.getProperty("user.dir")
。但是,当我从批处理文件运行我的java应用程序时,此代码返回批处理文件的路径,该路径与java应用程序的路径不同。
如何获取位于Java项目文件夹中的文件abc.txt的路径?
答案 0 :(得分:1)
System.getProperty(“user.dir”)为您提供了正确的目录,因为您的应用程序是在批处理文件中启动的。这是它的工作方式。
您始终可以使用ClassLoader将文件加载到应用程序中。
假设您已将abc.txt放入项目文件夹中。实际上,如果您在代码中的某处将其用作资源文件,则应将其放在项目的src / resources文件夹中。然后在您的代码中,执行以下操作:
File file = new File(getClass().getResource("abc.txt").getFile());
无论您的应用程序在何处启动,都可以访问该文件。
查看this post on using ClassLoader将有助于您更好地了解如何在Java中加载资源。
<强>更新强>
MyClass.java仅包含以下代码:
public class MyClass {
public static void main(String[] args) {
System.out.println("s: " + MyClass.class.getClassLoader().getResource("abc.txt").getFile());
}
}
答案 1 :(得分:0)
我遇到了同样的问题,我在搜索A LOT后找到的唯一工作就是将启动批处理文件放在与java应用程序相同的路径中,然后生成批处理的快捷方式,这就是我可以放在任何地方的地方其他文件夹....
之后,java运行良好......
答案 2 :(得分:0)
假设您基本上想要在代码中使用相对路径,可以使用以下函数获取源目录,然后使用源代码路径中文件的相对位置获取任何文件。
public static String getMySourcePath() {
URL location = <Your class>.class.getProtectionDomain().getCodeSource()
.getLocation();
String srcPath = location.toString().replace("file:/", "")
.replace("bin", "src");
return srcPath;
}