2021-02-08【Web作业开发记录】Java代码读取文件问题

【Web作业开发记录】Java代码读取文件问题

1.问题分析

在项目中需要读取properties文件,而对于gradle项目,在java文件夹底下的properties文件在编译打包时会自动忽略,最终造成NPE。

2.解决方法

对于gradle项目,与java文件夹有一个同级的文件夹resources,里面的文件在编译打包时不会忽略。通过DBUtil的Class类的getResourceAsStream方法获得访问InputStream,即DBUtil.class.getResourceAsStream(“/properties/account.properties”)再通过Properties类的load方法加载该输入流,通过Properties类的getProperty获得数据。

3. 示例代码

try {
            Class.forName(DRIVER_CLASS);
            Properties properties = new Properties();
            properties.load(DBUtil.class.getResourceAsStream("/properties/account.properties"));
            URL = properties.getProperty("url");
            USERNAME = properties.getProperty("username");
            PASSWORD = properties.getProperty("password");
        } catch (ClassNotFoundException | IOException | NullPointerException e) {
            e.printStackTrace();
            System.out.println("Error");
            System.exit(1);
        }

项目路径图
在这里插入图片描述

4. 问题反思

该问题涉及到java代码读取文件的路径问题,现在对Class Loader并不理解。在getResourceAsStream方法的文档中提到,The rules for searching resources associated with a given class are implemented by the defining class loader of the class. 这句话的具体含义无法理解。网上也有提到,形如DBUtil.class.getResourceAsStream()和DBUtil.class.getClassLoader().getResourceAsStream()在使用的时候存在区别。从源码角度看,前者是通过调用后者完成的,但前者在调用前进行了参数的处理。若以”/”开头,则去掉了该”/”,若不是以”/”开头,则认为该name是通过”.”进行分割,并进行了部分处理。
该部分有待进一步学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值