Java-使用getClass()的文件路径。getResource()不起作用
我一直在阅读在这里和Quora上被问到的问题,但是我仍然不明白为什么我不能访问位于“src/main/resources”文件夹中的文件。 当我手动指定相对路径“src/main/resources/config/serverConf.xml”时,一切正常 项目结构: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
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/