Java - 使用getClass()。getResource()的文件路径不起作用

时间:2018-05-31 19:00:10

标签: java file relative-path

我一直在阅读此处和Quora上提出的相同问题,但是,我仍然不明白为什么我无法访问位于&s; src / main / resources'夹。 当我手动指定相对路径" src / main / resources / config / serverConf.xml"

时,一切正常

项目结构:

src/main/java/"project related folders"
src/main/resources/config/serverConf.xml

主要课程:

public class Main{

    public Main(){
        File file = new File(this.getClass().getResource("config/serverConf.xml").getPath());
        if(file.exists())
            System.out.println("Yes");
        else
            System.out.println("No");
    }

    public static void main(String[] args){
        Main main = new Main();
    }
}

4 个答案:

答案 0 :(得分:2)

"config/serverConf.xml"

应该是

"/config/serverConf.xml"

答案 1 :(得分:0)

通常领先的/将成为你的文件路径,但我能够给它一个文件名,它认为它对我来说很好。

File file = new File(this.getClass().getResource("serverConf.xml").getPath());

答案 2 :(得分:0)

用户Nikolas和Antoniossss已经回答了这个问题。只是给它一个简短的解释,以防它有所帮助。从你的目录结构我猜你正在使用Maven。当您使用Maven构建项目时,Maven将所有文件夹和文件复制到File file = new File(this.getClass().getResource("/config/serverConf.xml").getPath()); 文件夹,该文件夹是类路径的根。因此,在您的情况下,以下应该有效:

config

但是如果你想在原始代码中使用相对路径,你应该在Main.java类所在的目录中创建serverConf.xml文件夹并将File file = new File(this.getClass().getResource("config/serverConf.xml").getPath()); 放在那里。那么以下内容也应该有效:

src/main/resources

也就是说,更好的方法是将配置文件放在{i * j + (<span>{i + j}</span>)文件夹下。

答案 3 :(得分:0)

提供给getResource()方法的url必须是相对于类路径的。因此,如果必须从命令行运行它,则需要提供资源文件夹的路径才能使其正常工作,即:

java Main -cp src/main/resources/

如果您正在使用IDE,那么通常会添加类路径的配置