我在使用MyBatis和Eclipse时发现了奇怪的行为。
MyBatis找到我的xml有困难,所以我尝试使用绝对路径(仅用于测试目的),但仍然会抛出错误:
为了确保该文件存在,我在将其用作资源之前添加了对文件存在的检查,因此我确信该文件存在:
String resource = "e:/prace/workspace/SpringBatis/src/main/java/com/mkyong/MyBatis/xml/batisConfig.xml";// path of the mybatis configuration file.
File file = new File(resource);
System.out.println(file.exists());
Reader reader = Resources.getResourceAsReader(resource);// read the mybatis confiuguration xml file
有了这个输出:
true
java.io.IOException: Could not find resource e:/prace/workspace/SpringBatis/src/main/java/com/mkyong/MyBatis/xml/batisConfig.xml
at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:89)
有什么想法吗?
答案 0 :(得分:6)
您有2个场景
使用java io读取文件。既然你已经给了绝对的道路。如果文件存在,它将始终读取该文件。
String resource = "e:/prace/workspace/SpringBatis/src/main/java/com/mkyong/MyBatis/xml/batisConfig.xml";// path of the mybatis configuration file.
File file = new File(resource);
System.out.println(file.exists());
Reader reader = new FileReader(resource);
您尝试读取配置文件的方案是使用资源(这是您认为的主要目标)。 Resources类总是尝试从类路径中读取文件。这是来自Resources.java类的java注释作为证明。
/*
* Gets a URL as a Reader
*
* @param urlString - the URL to get
* @return A Reader with the data from the URL
* @throws java.io.IOException If the resource cannot be found or read
*/
public static Reader getUrlAsReader(String urlString) throws IOException {}
现在如何解决此问题
从文件夹结构我假设您正在使用Maven。因此,默认情况下,您的类路径为SpringBatis/src/main/java
或SpringBatis/src/main/resources
因此您可以将资源路径提供为com/mkyong/MyBatis/xml/batisConfig.xml
,在您的情况下,当前资源路径为e:/prace/workspace/SpringBatis/src/main/java/e:/prace/workspace/SpringBatis/src/main/java/com/mkyong/MyBatis/xml/batisConfig.xml
因此你的代码应该是这样的。
String resource = "com/mkyong/MyBatis/xml/batisConfig.xml";// path of the mybatis configuration file.
// File file = new File(resource);
System.out.println(file.exists());
// Reader reader = new FileReader(resource);
如果您正在使用eclipse,则可以按如下方式验证类路径。 正确的项目 - >项目属性 - > java构建路径 - >来源标签。 你应该找到所有相关的类路径。例如,对于您的项目SpringBatis,您会发现SpringBatis / main / java包含文件,排除文件,目录等。
注意强>
由于您已将batisConfig.xml放在src / main / java下。默认情况下,如果需要包含您需要相应配置的所有文件,maven配置为仅包含*/*.java
文件(仅限java文件)。但我建议将xml文件移动到src / main / resources目录(这也是一个类路径)