共计 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);
}
}
