java.io.FileNotFoundException: class path resource cannot be opened because it does not exist (even when kept in java folder) java.io.FileNotFoundException: 无法打开类路径资源,因为它不存在(即使保留在java文件夹中)

16 浏览
0 Comments

java.io.FileNotFoundException: class path resource cannot be opened because it does not exist (even when kept in java folder) java.io.FileNotFoundException: 无法打开类路径资源,因为它不存在(即使保留在java文件夹中)

我正在尝试在Spring中创建我的第一个bean,但在加载上下文时遇到了问题。

我有一个bean的配置XML文件位于src/main/resources。

我收到了以下IOException:

主线程中的异常" org.springframework.beans.factory.BeanDefinitionStoreException: 从类路径资源[src/main/resources/beans.xml]解析XML文档时发生IOException;嵌套异常是

java.io.FileNotFoundException:因为它不存在,所以无法打开类路径资源[src/main/resources/beans.xml]

但我无法理解,因为我进行了以下代码测试:

File f = new File("src/main/resources/beans.xml");
System.out.println("Exist test: " + f.exists());

它给了我true!resources在类路径中。出了什么问题?

0
0 Comments

问题原因:使用ClassPathXmlApplicationContext时,路径前缀使用的是file,这个前缀表示文件系统资源,而不是类路径资源。因此,如果尝试打开一个不存在的类路径资源,就会出现java.io.FileNotFoundException异常。

解决方法:使用正确的路径前缀来指定类路径资源。可以使用classpath前缀,或者直接省略前缀。另外,也可以考虑使用FileSystemXmlApplicationContext来处理文件资源。

文章内容如下:

在使用ClassPathXmlApplicationContext时,可能会遇到类路径资源无法打开的问题,错误信息为java.io.FileNotFoundException: class path resource cannot be opened because it does not exist (even when kept in java folder)。下面给出了一种解决方法:

new ClassPathXmlApplicationContext("file:src/main/resources/beans.xml");

这个问题的原因是在路径前缀上的错误。使用file前缀时,表示文件系统资源,而不是类路径资源。因此,尝试打开一个不存在的类路径资源时,就会出现FileNotFoundException异常。

为了解决这个问题,可以使用正确的路径前缀来指定类路径资源。可以使用classpath前缀,或者直接省略前缀。另外,也可以考虑使用FileSystemXmlApplicationContext来处理文件资源。

上述解决方法已经被一些用户确认有效。因此,如果遇到了类似的问题,可以尝试这种解决方案。希望对大家有所帮助!

0
0 Comments

在使用ClassPathXmlApplicationContext("beans.xml")时出现了java.io.FileNotFoundException: class path resource cannot be opened because it does not exist (even when kept in java folder)的错误。

这个问题的原因是无法找到指定的文件路径。根据提供的信息,文件beans.xml位于项目的根目录下。但是,在使用ClassPathXmlApplicationContext时,它默认会在类路径下搜索文件。因此,如果文件不在类路径下,就会出现文件找不到的错误。

为了解决这个问题,有两种解决方案:

1. 将beans.xml文件从包中移出,放在默认包中。

2. 在使用ClassPathXmlApplicationContext时,指定包名。

第一种解决方案是将beans.xml文件移出包,并放在默认包中。这样,ClassPathXmlApplicationContext就能够找到文件并成功加载。

第二种解决方案是在使用ClassPathXmlApplicationContext时,指定beans.xml文件所在的包名。例如,ClassPathXmlApplicationContext("com/mypackage/beans.xml")。通过指定包名,ClassPathXmlApplicationContext就能够准确地找到文件并加载。

需要注意的是,参考路径"com/mypackage/beans.xml""/com/mypackage/beans.xml"是相同的,因为"com/mypackage/beans.xml"是一个相对路径,它使用"/"(根目录)来构建绝对路径。

0
0 Comments

问题的原因是在初始化ApplicationContext时,指定的配置文件路径不正确。最初的声明中,将beans.xml文件放在项目的根目录下,因此指定的路径为"beans.xml"。但是后来将配置文件移动到了src/main/resources目录下,因此需要修改为"src/main/resources/beans.xml"。然而,即使修改了路径,仍然出现了IO异常。最后,将配置文件重新放回src/main/resources目录,并将声明修改为"beans.xml",问题得到解决。

问题的解决方法是将配置文件放在src/main/resources目录下,并在初始化ApplicationContext时使用"beans.xml"作为路径。

这个解决方法的原理是,在编译和打包项目时,所有来自"src/main/java"目录的文件和子目录都会被复制到打包后的jar文件的根目录中。同样的规则也适用于"src/main/resources"目录下的文件。当代码运行时,无法找到类似"src/main/resources/beans.xml"的文件,因为beans.xml文件已经被复制到了jar文件的根目录中。

使用ClassPathXmlApplicationContext时,要正确指定beans.xml文件的位置,应该使用"/beans.xml"作为路径,因为这是jar文件中的位置以及类路径中的位置。

这个解决方法可以通过解压缩jar文件并查看其内容来验证。

需要注意的是,在命令行中运行jar文件时,可能会出现问题,而在Eclipse中运行正常。

0