0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何读取 classpath 下的文件

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-10 15:02 次阅读

Java 程序经常要读取配置文件(properties)、图片(jpg)、文本文件(txt、csv),我们可以使用 上次所讲的 InputStream 实现。

public static void main(String[] args) throws Exception {
        String path = "D:config.properties";

        byte[] config = new byte[1024];

        try (InputStream inputStream = new FileInputStream(path)){
            while (inputStream.read(config) != -1) {
                System.out.println(new String(config, "utf-8"));
            }
        }
    }

读取classpath

java 程序经常是部署在 Linux 上的,必然不可能使用 "D:" 这种盘符路径。总不能在开发的时候用 windows 路径,发布到 Linux 的时候注释掉吧?最终,将配置文件放在 java 程序的 resources 下

图片

  1. 使用 class 处理

class 的 getResourceAsStream() 方法可以返回一个 InputStream。

public void readProperties() {
    InputStream inputStream = this.getClass().getResourceAsStream("/config.properties");
    this.parseInputStream(inputStream);

}

public void parseInputStream(InputStream inputStream) {
    try {
        byte[] config = new byte[1024];
        while (inputStream.read(config) != -1) {
            System.out.println(new String(config, "utf-8"));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

该方法接受一个文件路径字符串参数,表示文件的路径,这个路径有两种写法:

以"/"开头,表示以类路径为起始目录。不以"/"开头,表示相对于当前类的相对路径。

  1. 使用 ClassLoader 处理

ClassLoader 下也是 getResourceAsStream() 方法,这个方法的参数不能加 /,不然就是找不到文件。

public void readProperties() {
    InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("config.properties");

    this.parseInputStream(inputStream);

}

getResourceAsStream 源码分析

把 class.getResourceAsStream() 方法上路径参数中的 / 拿掉,就会报 java.lang.NullPointerException 异常,没有找到这个文件。

把 getResourceAsStream() 的源码打开,就会发现读取资源文件路径的源码中调用的居然是 ClassLoader 的 getResource() 方法。

public URL getResource(String name) {
    URL url;
    if (parent != null) {
        url = parent.getResource(name);
    } else {
        url = getBootstrapResource(name);
    }
    if (url == null) {
        url = findResource(name);
    }
    return url;
}

也就是说 class 和 classLoader 读取文件实际上调用的是同一个方法。不过在 class.getResourceAsStream() 调用 getResource 之前会判断路径的最前面是否有 /,没有 / 就会加上包名。

图片

总结

在本文中学习了如何读取 classpath 下的文件,以及看了看获取文件路径的源码,用 getResourc() 方法就可以知道读取文件的路径是否正确。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206738
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    102996
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79547
收藏 人收藏

    评论

    相关推荐

    在LabVIEW中读取多列数据文件的通用方法

    针对LabVIEW中提供的文件读取函数功能的不足,介绍了一种读取多列数据文件的通用方法。关键词:LabVIEW;多列数据;文件
    发表于 08-05 16:31 305次下载

    C语言入门教程-读取文本文件

    读取文本文件若要读取一个文件,请使用r模式打开。一般来说,读取文件时最好不要用fscanf,因为
    发表于 07-29 11:29 2824次阅读

    at24c02读取程序头文件

    at24c02读取程序头文件,每8个数据存一次,可以一次性读出来
    发表于 08-05 17:32 6次下载

    如何读取本地文件到labview中,获得文件信息资料下载

    读取本地文件到labview中,获得文件信息。
    发表于 03-27 10:21 40次下载

    labview如何读取excel文件

    本文档的主要内容详细介绍的是labview如何读取excel文件
    发表于 08-16 08:00 192次下载
    labview如何<b class='flag-5'>读取</b>excel<b class='flag-5'>文件</b>

    LabVIEW读取两列txt文件的工程文件免费下载

    本文档的主要内容详细介绍的是LabVIEW读取两列txt文件的工程文件免费下载。
    发表于 12-04 15:21 58次下载
    LabVIEW<b class='flag-5'>读取</b>两列txt<b class='flag-5'>文件</b>的工程<b class='flag-5'>文件</b>免费下载

    python文件读取的源代码免费下载

    本文档的主要内容详细介绍的是python文件读取的源代码免费下载。
    发表于 08-07 17:14 20次下载
    python<b class='flag-5'>文件</b><b class='flag-5'>读取</b>的源代码免费下载

    串口通信之读取与发送及LabView文件下载

    串口通信之读取与发送及LabView文件下载
    发表于 04-26 11:06 172次下载

    读取公盘文件方法

    读取公盘文件方法
    发表于 11-07 11:27 0次下载

    汇川PLC读取电脑上的文件

    qq群里老被人吊,看不起玩C#的,我只是业余看看下位机,发现汇川PLC是真的香,支持G代码,带的ecat轴数也多。就是新的购买渠道不行。 学习资 料还有些欠缺。比如PLC去读取电脑上的G代码文件。每次拷贝下去很麻烦。下面我写个帖子:PLC控制电脑在D盘:打开
    发表于 04-17 15:28 1次下载
    汇川PLC<b class='flag-5'>读取</b>电脑上的<b class='flag-5'>文件</b>

    介绍Python中常用的文件读取方法以及应用示例

    ython 文件读取是 Python 语言中的基本操作之一。在编写Python 程序时,我们经常需要读取不同的文件,例如文本文件、CSV
    的头像 发表于 04-27 09:16 609次阅读

    python文件读取

    文件读取的步骤: 打开文本文件对象 写入数据 文件读取一般使用如下三个方法: read([size]) : 从
    的头像 发表于 06-21 17:23 1015次阅读
    python<b class='flag-5'>文件</b>的<b class='flag-5'>读取</b>

    labview读取解析CAN DBC文件

    labview读取解析can总线dbc文件
    发表于 07-03 09:18 74次下载

    如何使用Python和pandas库读取、写入文件

    在本文中,我将介绍如何使用 Python 和 pandas 库读取、写入文件。 1、安装 pip install pandas 2、读取 import pandas as pd df
    的头像 发表于 09-11 17:52 789次阅读

    如何使用Python读取写入Word文件

    01 准备 Python 是一种通用编程语言,也可以用于处理 Microsoft Word 文件。在本文中,我将向你介绍如何使用 Python 和 python-docx 库读取、写入和操作
    的头像 发表于 09-27 17:03 1458次阅读