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

    文章

    11296

    浏览量

    209358
  • JAVA
    +关注

    关注

    19

    文章

    2966

    浏览量

    104704
  • 程序
    +关注

    关注

    117

    文章

    3785

    浏览量

    81008
收藏 人收藏

    评论

    相关推荐

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

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

    xml和YAML文件读取_源代码

    《OpenCV3编程入门》书本配套源代码:xml和YAML文件读取
    发表于 06-06 15:20 6次下载

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

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

    labview如何读取excel文件

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

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

    本文档的主要内容详细介绍的是LabVIEW读取两列txt文件的工程文件免费下载。
    发表于 12-04 15:21 62次下载
    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 183次下载

    stm32程序升级SD卡读取hex文件写入flash

    stm32程序升级SD卡读取hex文件写入flash
    发表于 11-20 12:36 59次下载
    stm32程序升级SD卡<b class='flag-5'>读取</b>hex<b class='flag-5'>文件</b>写入flash

    读取公盘文件方法

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

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

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

    PSTViewer软件如何操作以读取带有附件的PST文件

    PST文件 无PST文件大小限制,可无缝读取任何大小的OutlookPST文件 能够同时读取和查看多个PST
    的头像 发表于 05-29 09:27 5347次阅读
    PSTViewer软件如何操作以<b class='flag-5'>读取</b>带有附件的PST<b class='flag-5'>文件</b>

    python文件读取

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

    labview读取解析CAN DBC文件

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

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

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

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

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