Java相对路径从我的src文件夹

时间:2017-06-22 12:01:47

标签: java

我想使用相对路径从我的src文件夹开始从资源文件夹中获取文件。

File myFile = new File("/src/main/resources/filefolder/file.xml");

当我尝试这个时:

File myFile = new File("../src/main/resources/filefolder/file.xml");

或者这个:

File myFile = new File("../../../../src/main/resources/filefolder/file.xml");

我明白了:

java.io.FileNotFoundException: /srv/../src/main/resources/filefolder/file.xml(No such file or directory)

我的文件结构:

-src
   -main
       -java
           -com.my.site
              -task
                 -MyClass.java
       -resources

3 个答案:

答案 0 :(得分:3)

您的路径是正确的,只需在src之前添加点,以表示您正在搜索项目根目录的相对路径,在其他情况下,您将按绝对路径搜索

 File myFile = new File("./src/resources/filefolder/file.xml");

如果不起作用 - 试试这个:

File myFile = new File("src/resources/filefolder/file.xml");

无论如何你可以运行它来检查你的根目录是什么:

public static void main(String[] args) {
  System.out.println(new File("").getAbsolutePath());
}

答案 1 :(得分:2)

我看到你问的是相对路径但似乎你只想从资源中读取文件,我相信最常见的读取资源的方法是使用类加载器,例如:

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("filefolder/file.xml").getFile());

答案 2 :(得分:2)

只是一点点解释......你想要做的是从资源文件夹中获取资源,这是一项非常典型的任务。

你必须意识到的是,整个/ src / main / etc。结构是用来构建源代码,换句话说,就是.java文件(和资源文件)。在您编译的程序中,此结构将不再以相同的方式存在,因此依赖于src目录是一个非常非常糟糕的主意。

这个结构适用于maven:

src/main - >应该成为"计划的一部分"一直以来 src/test - >所有应该只是"程序的一部分"何时运行自动化测试

src/main/java - >总是需要存在的.java文件 src/main/resources - >总是需要在那里的资源(图像,模板等)

src/test/java - >仅在自动化测试期间需要的.java文件(例如,自动化测试本身)
src/test/resources - >仅在自动化测试中使用的资源,例如,用于比较结果的文件等

这在哪里引领我们?这导致了一个简单的事实,最终,整个src / main和src / test将根本不存在,实际上,java和资源将被加在一起(你可以通过查看.jar​​文件来检查它 - 它可以使用任何Zip程序打开)。这就是为什么@LazerBanana是完全正确的:你没有尝试导航目录,你要求资源和资源都在你的类路径中 - 如果它们在资源或java文件夹中(因为那&#39)并不重要; s只是为了保持源代码的结构化。在您的类路径中,两个文件夹组合在一起。