getResourceAsStream() 在IntelliJ IDEA中的用法以及对返回值为null的处理方式

本文介绍了在IntelliJ IDEA的Maven项目中使用getResourceAsStream()方法读取资源文件的方法,包括不使用ClassLoader和使用ClassLoader的情况,并分析了不同用法在项目结构中的查找路径,提供了处理返回值为null的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.IntelliJ IDEA中maven项目文件结构

当我们用idea创建maven项目的时候,项目文件的结构如下图所示:

其中项目主要源代码一般放置在src/main/java文件夹下
这里将后续要用到的所有外部资源文件都放在src/main/resources文件夹下,推荐读者采用这种方式来管理文件,便于后续的讲解和文件管理。注意:对于src/main/resources文件夹下的所有文件,idea在编译后都会在src/target/classes文件夹下保留其拷贝,因此在这两个文件夹下的同名同类型文件的内容是一模一样的。

 2.getResourceAsStream()的几种使用方法


当要调用resources文件夹中的资源文件时,我们肯定想尽可能避免用到绝对路径读取文件,因为这样程序移植或者在其他设备上运行时又要重新修改绝对路径,所以可以通过getResourceAsStream()方法,使用相对路径方式读取到文件,这样在程序移植或者更换设备运行时,只需要保证将所有要调用的资源文件都放置在src/main/resources文件夹下,而不需要再修改程序本身,该方法有两种形式:

this.getClass().getResourceAsStream()

this.getClass().getClassLoader().getResourceAsStream()

以下面的项目为例,这里演示的加载1.txt文件,文件内容是Hello,world

(1)不使用ClassLoader加载文件

i.InputStream is = this.getClass().getResourceAsStream("/" + fileName)

package com.first;

import org.apache.commons.io.IOUtils;
import java.io.InputStream;

public class BJava {
    public static void main(String[] args) throws Exception {
        InputStream is = this.getClass().getResourceAsStream("/1.txt");
        String s = IOUtils.toString(is);
        System.out.println(s);
    }
}

结果:

  this.getClass().getResourceAsStream("/1.txt" )从src/target/classes文件夹下读取文件,由上面项目结构图可知文件存在,所以程序可以拿到资源,不报错。若将方法中的/去掉,则读取的是当前类所在文件夹下的文件,不存在该文件,显然报空指针异常。

ii.InputStream is = this.getClass().getResourceAsStream(fileName)

package com.first;

import org.apache.commons.io.IOUtils;
import java.io.InputStream;

public class BJava {
    public static void main(String[] args) throws Exception {
        InputStream is = this.getClass().getResourceAsStream("1.txt");
        String s = IOUtils.toString(is);
        System.out.println(s);
    }
}

结果:

this.getClass().getResourceAsStream(“1.txt")是从当前程序对应类所在的文件夹,即在src/main/java/com/first文件夹中找1.txt,该文件夹下没有1.txt,所以程序找不着,会报空指针异常。

(2)使用ClassLoader加载文件

InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileName)

package com.first;

import org.apache.commons.io.IOUtils;
import java.io.InputStream;

public class BJava {
    public static void main(String[] args) throws Exception {
        InputStream is = this.getClass().getClassLoader().getResourceAsStream("1.txt");
        String s = IOUtils.toString(is);
        System.out.println(s);
    }
}

结果:

 this.getClass().getClassLoader().getResourceAsStream("1.txt")直接从src/target/classes文件夹下读取文件,存在该文件,所以程序不报错

3.总结

(1)InputStream is = this.getClass().getResourceAsStream(fileName)

会从当前类所在的文件夹下去找,这个文件如果不和该类在一个目录下,就找不到

(2)InputStream is = this.getClass().getResourceAsStream("/" + fileName)

会从编译后的整个src/target/classes目录下去找,maven也会把资源文件打包进classes文件夹,如果该文件存在,则可以找到

(3)InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileName)

会从编译后的整个src/target/classes目录下去找,文件名前不需要再加/符号,也就是说在(2)中的文件名fileName前加一个/就可以实现和(3)一样的功能
因此,当使用读取文件时,若程序报空指针异常,则笔者建议将文件全部放在src/main/resources文件夹后,再用上面(2)和(3)两种方式读取文件

 

<think>好的,我现在需要帮助用户解决在IntelliJ IDEA中配置MyBatis环境的问题。首先,我需要回顾用户提供的引用内容,确保回答准确并正确引用来源。 用户提到了四个引用,其中引用[1]和[2]详细说明了配置MyBatis的步骤,包括下载jar文件、配置核心文件、创建POJO和映射文件等。引用[3]涉及MyBatis逆向工程,而引用[4]则是关于XML配置文件的背景色设置,这可能对用户体验有帮助。 首先,我应该按照配置环境的步骤来组织回答。从创建项目、添加依赖开始。用户可能使用Maven或手动添加JAR,所以需要两种方法。引用[1]提到手动下载jar并部署,而引用[2]则介绍了在pom.xml中添加依赖或使用插件,这需要分别说明。 然后,创建核心配置文件configuration.xml,这部分引用[1]的1.3部分有详细步骤,需要指出关键配置项如数据库连接和映射文件路径。接下来是创建POJO和SQL映射文件,引用[1]的1.4部分提到了这些,需要说明映射文件的基本结构,比如<mapper>和<select>标签。 测试类的创建也是必要的,引用[1]的1.5部分提到了使用SqlSessionFactory来获取SqlSession并执行查询,这里需要给出示例代码,并确保代码正确无误。 关于逆向工程,引用[3]提到使用MyBatis Generator,可以简要说明如何配置生成器,但用户的问题主要是环境设置,这部分可能作为优化或高级步骤提及。 另外,引用[4]提到的XML背景色设置虽然不是配置环境的核心步骤,但可以作为一个实用技巧加入,提升用户体验。 最后,生成相关问题时要围绕配置步骤、依赖管理、常见问题等,确保问题相关且有价值。 需要注意的是,用户提供的引用中,引用[1]和[2]可能存在重复或不同的方法,需要区分手动配置和Maven依赖添加的不同流程。同时,确保所有步骤在IntelliJ IDEA中操作,比如创建文件的位置、插件的使用等。 可能遇到的错误包括依赖未正确添加、配置文件路径错误、映射文件未注册等,应在注意事项中提到,并引导用户检查这些点。 总结回答结构: 1. 创建项目 2. 添加依赖(手动/Maven) 3. 创建核心配置文件 4. 创建POJO和映射文件 5. 编写测试类 6. 注意事项(逆向工程、XML背景色) 确保每个步骤都引用正确的来源,例如添加依赖部分引用[1]和[2],配置文件部分引用[1],测试类引用[1]等。同时,语言要简洁明了,步骤清晰,适合新手跟随操作。</think>### 如何在 IntelliJ IDEA 中配置 MyBatis 环境 #### 1. 创建项目并添加框架支持 - **新建Java项目**:在IDEA中选择 `File → New → Project`,选择Java项目模板并初始化。 - **添加MyBatis依赖**: - **手动添加JAR**:从MyBatis官网下载核心JAR包(如`mybatis-x.x.x.jar`)和数据库驱动,通过 `File → Project Structure → Libraries` 添加到项目[^1]。 - **Maven依赖**:在`pom.xml`中添加以下依赖(推荐): ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> ``` 可通过插件 `EditStarters` 快速添加(需安装)[^2]。 #### 2. 创建 MyBatis 核心配置文件 1. 在`src/main/resources`目录下新建`mybatis-config.xml`,内容如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/数据库名"/> <property name="username" value="root"/> <property name="password" value="密码"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/UserMapper.xml"/> <!-- 映射文件路径 --> </mappers> </configuration> ``` 关键配置包括数据库连接信息和映射文件注册[^1]。 #### 3. 创建持久类与SQL映射文件 1. **POJO类**:在`src/main/java`中创建实体类,例如: ```java public class User { private int id; private String name; // getter/setter省略 } ``` 2. **映射文件**:在`resources/mapper`目录下创建`UserMapper.xml`: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="UserMapper"> <select id="selectUser" resultType="com.example.pojo.User"> SELECT * FROM user WHERE id = #{id} </select> </mapper> ``` 需确保`resultType`与类全路径一致。 #### 4. 编写测试代码 ```java public class MyBatisTest { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); try (SqlSession session = sqlSessionFactory.openSession()) { User user = session.selectOne("UserMapper.selectUser", 1); System.out.println(user.getName()); } } } ``` 通过`SqlSession`执行SQL并获取结果[^1]。 #### 5. 注意事项 - **逆向工程**:可使用MyBatis Generator插件自动生成POJO和映射文件(需配置`generatorConfig.xml`)[^3]。 - **XML背景色优化**:在IDEA设置中调整XML文件背景色(`Settings → Editor → Color Scheme → General → Code → XML`)[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒冢人家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值