繁体   English   中英

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

[英]Java - File path using getClass().getResource() does not work

我一直在阅读此处和Quora上所问的相同问题,但是,我仍然不明白为什么我无法访问'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();
    }
}
"config/serverConf.xml"

应该

"/config/serverConf.xml"

通常,前导/是您使用文件路径的首选,但是我能够给它提供文件名,并且它对我来说很好。

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

用户Nikolas和Antoniossss已经回答了问题。 只是简要说明一下以防万一。 从您的目录结构中,我猜您正在使用Maven。 当使用Maven生成项目时,Maven将所有文件夹和文件复制到target/classes文件夹,该文件夹是类路径的根。 因此,在您的情况下,以下方法应该起作用:

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

但是,如果要使用原始代码中的相对路径,则应在Main.java类所在的目录中创建config文件夹,并将serverConf.xml此处。 然后,以下内容也应该起作用:

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

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

提供给getResource()方法的url必须相对于您的类路径。 因此,如果您必须从命令行运行此程序,则需要提供指向资源文件夹的路径才能使它起作用,即:

java Main -cp src/main/resources/

如果您使用的是IDE,通常会有用于添加类路径的配置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM