读懂java中的getResourceAsStream

2,208次阅读

共计 1545 个字符,预计需要花费 4 分钟才能阅读完成。

读懂 java 中的 getResourceAsStream

在读取配置文件的时候总是会纠结路径的问题, 其实所有的路径问题总逃不脱一下几个关键字

相对路径, 绝对路径, 类路径(classpath)

首先先介绍一下这几个路径

相对路径:

相对路径: 顾名思义, 路径是相对的

比如当前的文件目录是 test, 目录 test 下有文件 aaa,
如果要定位 aaa 文件的路径, 可以使用 aaa 文件的相对于 test 目录的路径 test/aaa

此时 test/aaa 就是相对路径

绝对路径:

绝对路径其实也是一种 " 相对路径 ", 但是它相对的是盘符 (c 盘,d 盘等待) 或者 linux 中的根目录

例如:C:\\Users\\123\\Desktop\\

类路径:

这个类路径顾名思义就是类文件的路径
如果没有类路径, 现在仅仅有相对路径和绝对路径
如果需要去定位一个文件的话, 绝对路径肯定不行, 因为项目肯定是要移植的
那只能用相对路径了, 如果使用相对路径, 最好的肯定是相对于项目的根目录好一些, 因为可以找到所有文件
那么每次要读取文件的时候都要写一遍项目的相对路径, 是不是挺麻烦的
所以就引入了类路径 -classpath, 这个路径其实就是项目的相对路径, 只不过被写入到了一个文件.classpath 中
然后当一个 java 程序运行的时候, 只要使用相对路径, 都会从这个.classpath 文件中去找对于的相对路径

1. 概述

下面的方法一般用来获取配置文件的信息

2. 用法

两种使用方式:

1.TestClass.class.getResourceAsStream(String path);

2.TestClass.class.getClassLoader.getResourceAsStream(String path);

3.class.getResourceAsStream

如果 path 不带 "/", 那么就是从当前 class 文件的路径下找文件

如果 path 带 "/", 那么就是从类路径.classpath 中去找文件

4.class.getClassLoader.getResourceAsStream

这个的 path 中可不能带 /, 因为这个的意思就是在类路径 classpath 中去找文件

5.maven 中的 classpath 详解

目录结构:

在 maven 项目中, 配置文件一般都放在 resources 中, 该文件夹中的配置文件一般都会被复制一份到 target 路径下的 classes 和 test-classes 中

在 classpath 中, 分别有指向 target/classes 和 target/test-classes 的配置, 然后 getResourceAsStream 就可以根据这个 xml 文件去找到对应的文件

package cool.exec.study;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;

public class TestClassPath {public static void main(String[] args) throws Exception {InputStream is = TestClassPath.class.getResourceAsStream("/conf2.properties");
    InputStreamReader isr = new InputStreamReader(is);
    Properties properties = new Properties();
    properties.load(isr);
    isr.close();
    String username = properties.getProperty("username");
    System.out.println(username);
  }
}
正文完
扫码关注公众学习更多内容
post-qrcode
   
jiajianfa007
版权声明:本站原创文章,由 jiajianfa007 2023-07-14发表,共计1545字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。