Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-使用getClass()的文件路径。getResource()不起作用_Java_File_Relative Path - Fatal编程技术网

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

Java-使用getClass()的文件路径。getResource()不起作用,java,file,relative-path,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 主要课程包括: public class Main{ p

我一直在阅读在这里和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"

通常,最主要的
/
将是使用文件路径的go to,但我只给了它文件名,它对我来说识别得很好


File File=new文件(this.getClass().getResource(“serverConf.xml”).getPath())

用户Nikolas和Antoniosss已经回答了这个问题。只是简单地解释一下,以防万一。从您的目录结构来看,我猜您正在使用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,通常会有一个用于添加类路径的配置

资源不是一个文件-它不会工作。你的下一个问题是“为什么它可以从eclipse中工作,但不能从JAR中工作”Antoniossss你能解释一下如何让程序执行吗?我尝试了经验丰富的用户回答的问题,但什么都不起作用。此外,我并没有将Maven用作构建工具……尽管
文件
可以表示为
URL
,但并非所有
URL
都可以表示为
文件
。试着打印从
.getResource(
返回的URL,看看它是否包含
。如果是,那就是其中一个问题。我的问题是,为什么这个程序需要
文件
,而不是
URL
,或者(否则)只需要访问资源?“Antoniosss你能解释一下吗?”提示:添加@Antoniosss(无论是谁,
@
都很重要)通知此人新的注释。这不起作用,因为我收到NullPointerException…File File=new File(This.getClass().getResource(“/config/serverConf.xml”).getPath());Resource不是一个文件您没有指定serverConf.xml所在的配置目录您知道如果OP-eg.build-JAR是从该目录生成的,那么这将不起作用吗?您知道如果OP-eg.build-JAR是从该目录生成的,那么这将不起作用吗?
java Main -cp src/main/resources/