使用绝对路径加载(不推荐)

直接写死路径,使用FileInputStream加载资源文件,但是路径就不能动了

public static void main(String[] args) throws IOException {// 下面2种写法都可以FileInputStream fis1 = new FileInputStream("D:/projects/demo-perm/src/main/java/com/zzhua/a.txt"); // 加载不到文件, 这里会报错FileInputStream fis2 = new FileInputStream("D:\\projects\\demo-perm\\src\\main\\java\\com\\zzhua\\a.txt"); // 加载不到文件, 这里会报错Properties props = new Properties();props.load(fis1);props.load(fis2);System.out.println(props);
}

使用Class加载资源文件

可以使用class加载相对于当前类所在文件夹的路径的资源文件,加载到资源文件的前提是文件必须要同时也拷贝到了classes文件夹对应的包中,不然加载不到,resources目录会自动拷贝到classes中,但是java文件夹下的资源文件不会拷贝到classes中,在这种情况下,maven需要作如下配置:

<build><resources><resource><directory>src/main/java</directory><excludes><exclude>**/*.java</exclude></excludes></resource></resources></build>
public static void main(String[] args) throws IOException {// 加载相对于DemoPermApplication.class类所在包路径下的文件InputStream is = DemoPermApplication.class.getResourceAsStream("a.txt"); // 加载不到文件,这里并不会报错,下面读取的时候才会报System.out.println((char)is.read());// 加载java文件夹中的a.txt资源文件InputStream is = DemoPermApplication.class.getResourceAsStream("/a.txt"); // 加载不到文件,这里并不会报错,下面读取的时候才会报System.out.println((char)is2.read());// 加载java文件夹中指定包下a.txt资源文件InputStream is = DemoPermApplication.class.getResourceAsStream("/com/zzhua/modules/a.txt");// 加载不到文件,这里并不会报错,下面读取的时候才会报System.out.println((char)is3.read());
}

Class加载源码

public final class Class<T> implements ... { public InputStream getResourceAsStream(String name) {// 根据传过来的名字, 解析 name = resolveName(name);ClassLoader cl = getClassLoader0();// 最终还是使用类加载器加载资源if (cl==null) {// A system class.return ClassLoader.getSystemResourceAsStream(name);}return cl.getResourceAsStream(name);}private String resolveName(String name) {// name不能为nullif (name == null) {return name;}// 如果name不是以 “/” 开头, 则认为它是相对路径, 相对于当前类所在包路径if (!name.startsWith("/")) {Class<?> c = this;while (c.isArray()) {c = c.getComponentType();}// 获取当前类全路径String baseName = c.getName();// 找到最后一个.,即当前类的包路径int index = baseName.lastIndexOf('.');// 将包名的.分隔改为/分隔, 并拼接上传过来的name, 组装为最终的路径名if (index != -1) {name = baseName.substring(0, index).replace('.', '/')+"/"+name;}} else {// 如果带了“/”, 则认为是绝对路径, 但最终是会把开头的这个“/”给去掉name = name.substring(1);}return name;}}

使用ClassLoader加载资源文件

加载到资源文件的前提也需要是文件必须要同时也拷贝到了classes文件夹对应的包中,要从根路径开始写

public static void main(String[] args) throws IOException {// 加载com/zzhua包下的a.txt资源文件(正确), 最前面不要加"/"InputStream is = DemoPermApplication.class.getClassLoader().getResourceAsStream("com/zzhua/a.txt");// 加载com/zzhua包下的a.txt资源文件(错误)InputStream is2 = DemoPermApplication.class.getClassLoader().getResourceAsStream("/com/zzhua/a.txt"); // 这样写是错误的System.out.println((char)is.read());  // 正确System.out.println((char)is2.read()); // 报错
}

java加载资源文件的3种方式相关推荐

  1. java加载properties文件的几种方式,java高级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  2. Python加载csv文件的两种方式

    本文主要讲解下Python加载csv文件的两种方式,如果知道如何处理的就不必往下看了! 下面来简单介绍下. 实例中的数据集是kaggle的Digit Recognizer的train.csv文件,数据 ...

  3. Spring加载properties文件的两种方式

    2019独角兽企业重金招聘Python工程师标准>>> 在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取pro ...

  4. HTML5动态加载资源方式,动态加载JavaScript文件的3种方式

    以下是遇到的几种动态加载JavaScript文件的方式,持续更新中... 一.使用document.write/writeln()方式 该种方式可以实现js文件的动态加载,原理就是在重写文档流,这种方 ...

  5. Qt 加载QML 文件的几种方式

    前言 之所以写这篇文章,是因为在项目中经常会碰到一个问题,qml 文件该如何加载到工程中,其实 Qt Quick APP 有两种模式,另外,还有一种场景是,在 QWidget 界面上加载 QML 页面 ...

  6. java 加载资源文件

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

  7. Android(Java)加载SO文件

    原文地址点击打开链接 一.前言 Android中有时候为了效率以及平台开发库的支持,难免会用到NDK开发,那么都会产生一个so文件,通过native方法进行调用,开发和调用步骤很简单,这里就不多说了, ...

  8. HTML5动态加载资源方式,动态加载JavaScript文件的两种方法

    这篇文章主要为大家详细介绍了动态加载JavaScript文件的两种方法,感兴趣的小伙伴们可以参考一下 第一种便是利用ajax方式,把script文件代码从背景加载到前台,而后对加载到的内容经过eval ...

  9. java配置文件实现方式_java相关:详解Spring加载Properties配置文件的四种方式

    java相关:详解Spring加载Properties配置文件的四种方式 发布于 2020-4-29| 复制链接 摘记: 一.通过 context:property-placeholder 标签实现配 ...

最新文章

  1. 线性回归之案例:波士顿房价预测
  2. 转载 干货 | 陪伴我学习NLP、知识图谱的那些资源(教程+书籍+网站+工具+论文...可以说很全面了)
  3. AI能写出靠谱医学报告了,CVPR2021收录 | 腾讯医典出品
  4. java mail smtps,使用javamail发SMTPS邮件,javamailsmtps邮件,Java通常情况下都不会
  5. ios 自动内存管理 ARC
  6. get_magic_quotes_gpc()函数用法介绍
  7. 《敏捷无敌》试读:第5章 成长的烦恼
  8. ASP.NET AJAX中防止用户多次提交页面
  9. SSH访问远程主机超时问题解决
  10. 毕业设计 - 题目 :基于大数据的疫情数据分析及可视化系统
  11. 开始看看repast建模方面的东西
  12. 淘宝装修:1920全屏海报(源代码免费下载)
  13. 夜场票为何一票难求?故宫院长在彩排现场解答观众
  14. 传统ADC主要指标:SFDR、SNR、SNDR、ENOB
  15. rose双机热备mysql,实战:ROSE HA双机热备系统安装指南
  16. 解决国外软件官网打不开,浏览器访问经常卡在正在建立TLS握手安全连接。
  17. InfoPath 2007 --来自microsoft.com
  18. flutter pdf 插件使用
  19. 1.《如何阅读一本书》读书若谈恋爱:如何阅读一本书?
  20. 基于PyQT5制作一个二维码生成器

热门文章

  1. 俞军:用户不是人,是需求的集合
  2. linux内核版本查询
  3. 分析 | 半导体元器件失效的五大原因详解
  4. 机器学习--贝叶斯模型
  5. matlab中连续信号的卷积,连续时间信号卷积运算的MATLAB实现
  6. 【科技秀】symbian虽然是最差的系统,但却有很多优秀软件其余系统不具备,想玩怎么办?模拟器又来了
  7. 解决电脑cpu锁频率0.4GHz问题
  8. WOL 微星 X570A-PRO 远程唤醒及远程桌面
  9. 小米电视通过自定义hosts文件去除开机视频广告的方法,亲测有效!
  10. PS - 产品精修(洗面奶)教程