很多Java程序启动的时候,都需要读取配置文件。例如,从一个.properties文件中读取配置:

String conf = "C:\\conf\\default.properties";

try (InputStream input = new FileInputStream(conf)) {

// TODO:

}

这段代码要正常执行,必须在C盘创建conf目录,然后在目录里创建default.properties文件。但是,在Linux系统上,路径和Windows的又不一样。

因此,从磁盘的固定目录读取配置文件,不是一个好的办法。

有没有路径无关的读取文件的方式呢?

我们知道,Java存放.class的目录或jar包也可以包含任意其他类型的文件,例如:

配置文件,例如.properties;

图片文件,例如.jpg;

文本文件,例如.txt,.csv;

……

从classpath读取文件就可以避免不同环境下文件路径不一致的问题:如果我们把default.properties文件放到classpath中,就不用关心它的实际存放路径。

在classpath中的资源文件,路径总是以/开头,我们先获取当前的Class对象,然后调用getResourceAsStream()就可以直接从classpath读取任意的资源文件:

try (InputStream input = getClass().getResourceAsStream("/default.properties")) {

// TODO:

}

调用getResourceAsStream()需要特别注意的一点是,如果资源文件不存在,它将返回null。因此,我们需要检查返回的InputStream是否为null,如果为null,表示资源文件在classpath中没有找到:

try (InputStream input = getClass().getResourceAsStream("/default.properties")) {

if (input != null) {

// TODO:

}

}

如果我们把默认的配置放到jar包中,再从外部文件系统读取一个可选的配置文件,就可以做到既有默认的配置文件,又可以让用户自己修改配置:

Properties props = new Properties();

props.load(inputStreamFromClassPath("/default.properties"));

props.load(inputStreamFromFile("./conf.properties"));

这样读取配置文件,应用程序启动就更加灵活。

小结

把资源存储在classpath中可以避免文件路径依赖;

Class对象的getResourceAsStream()可以从classpath中读取指定资源;

根据classpath读取资源时,需要检查返回的InputStream是否为null。

java读取classpath_读取classpath资源相关推荐

  1. java导出jar包后,程序运行时读取图片、音乐资源文件

    java导出jar包后,程序运行时读取图片.音乐资源文件 运行时程序就可以把图片.音乐资源加载进入了 start jre/bin/java -jar 名称.jar

  2. java 相对路径 文件读取,Java相对路径读取文件

    Java相对路径读取文件 不管你是新手还是老鸟,在程序中读取资源文件总会遇到一些找不到文件的问题,这与Java底层的实现有关,不能算bug,只要方法得当,问题还是可以解决的. 项目的文件夹结构: re ...

  3. java 取classpath_(转)Java获取CLASSPATH路径

    ClassLoader提供了两个方法用于从装载的类路径中取得资源: public URL getResource(String name); public InputStream getResourc ...

  4. Java Properties 类读取配置文件信息

    在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我们预知的.比如说我们开发了一个操作数据库的模块,在开发的时候我们连接本地的数据库那么 IP ,数据库名称,表名称,数据库主机等信息是我们本 ...

  5. Java项目中读取properties文件,以及六种获取路径的方法

    下面1-4的内容是网上收集的相关知识,总结来说,就是如下几个知识点: 最常用读取properties文件的方法 InputStream in = getClass().getResourceAsStr ...

  6. java使用缓冲区读取文件_在Java中使用Google的协议缓冲区

    java使用缓冲区读取文件 最近发布了 有效的Java第三版 ,我一直对确定此类Java开发书籍的更新感兴趣,该书籍的最新版本仅通过Java 6进行了介绍 . 在此版本中,显然存在与Java 7 , ...

  7. java压缩文件读取_用Java读取/写入压缩和非压缩文件

    java压缩文件读取 这篇文章的主要原因是尝试不要重复自己( DRY ),因为通常,我会遇到递归的需求,即读写压缩的和非压缩的文件(主要是JSON和CSV). 首先让我们看看如何读取文本文件. 注意我 ...

  8. java多线程批量读取文件(七)

    新公司入职一个多月了,至今没有事情可以做,十来个新同事都一样抓狂,所以大家都自己学习一些新东西,我最近在看zookeeper,感觉蛮不错的,和微服务的zuul以及eureka功能类似,只是代码复杂了一 ...

  9. Java项目中读取properties文件

    下面1-4的内容是网上收集的相关知识,总结来说,就是如下几个知识点: 最常用读取properties文件的方法 InputStream in = getClass().getResourceAsStr ...

最新文章

  1. 矩阵推导后注意力机制居然是这样
  2. 在页面最上面显示当前登陆的状态
  3. 软件工程心理学之1----开篇
  4. 02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架
  5. 动态删除列表中的元素
  6. (44)System Verilog数组逻辑运算
  7. 12个数据分析里最常用的思维定式,收藏起来吃灰
  8. 终于出手!谷歌母公司旗下GV风投首次投资AI芯片创业公司
  9. 命名 —— 函数、类的命名
  10. bzoj 1085: [SCOI2005]骑士精神(IDA*)
  11. duplicate symbols for architecture arm64的问题结决方法
  12. 软件著作权申请流程(自助申请免费登记)
  13. iptv 缓存 linux,一种IPTV直播业务的卡顿检测方法及系统与流程
  14. 【adb命令】电脑操作手机adb命令大全
  15. Java使用POI导入excel教程
  16. 删除下拉框只找23火星软件_下拉框首选28火星软件
  17. 关于能力素质模型建模
  18. 卡内基梅隆大学计算机专业类别,卡内基梅隆大学计算机专业优势介绍
  19. 如何屏蔽百度搜索推广
  20. linux mmc 读写,linux内核mmc读写分析

热门文章

  1. ironpython 开发wpf案例_IronPython和C#交互
  2. 微软ie架构师解密ie8
  3. FullCalendar Event数据回显
  4. mybatis mysql 模糊查询语句_mybatis模糊查询语句及注意事项
  5. 1127: 电话号码
  6. 源码圈内推信息整理(2017-12-30)
  7. 开源一款微信小程序云开发实例《爱豆UP榜》
  8. Android-Studio Gradle Build Flavor 使用小结
  9. 模拟MotionEvent事件
  10. 基于JAVA动物园管理系统计算机毕业设计源码+系统+lw文档+部署