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

ale*_*x_z 5 java file relative-path

我一直在阅读这里和 Quora 上提出的相同问题,但是,我仍然不明白为什么我无法访问位于“src/main/resources”文件夹中的文件。当我手动指定相对路径“src/main/resources/config/serverConf.xml”时,一切正常

项目结构:

src/main/java/"project related folders"
src/main/resources/config/serverConf.xml
Run Code Online (Sandbox Code Playgroud)

和主类:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

uju*_*ulu 2

用户 Nikolas 和 Antoniossss 已经回答了这个问题。只是给出一个简短的解释,以防有帮助。从你的目录结构来看,我猜你正在使用 Maven。当您使用 Maven 构建项目时,Maven 会将所有文件夹和文件复制到target/classes类路径的根文件夹中。因此,在您的情况下,以下内容应该有效:

File file = new File(this.getClass().getResource("/config/serverConf.xml").getPath());
Run Code Online (Sandbox Code Playgroud)

但是,如果您想像原始代码中那样使用相对路径,则应该在类所在的config目录中创建文件夹Main.java并将其放在serverConf.xml那里。那么以下内容也应该有效:

File file = new File(this.getClass().getResource("config/serverConf.xml").getPath());
Run Code Online (Sandbox Code Playgroud)

也就是说,更好的方法是将配置文件放在src/main/resources文件夹下。