java 路径、className.class.getResourceAsStream()、ClassLoader.getSystemResourceAsStream() 、FileInputStream
className.class.getResourceAsStream 用法:
第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件config.properties
那么,应该有如下代码:
//前面没有“/”代表当前类的目录
InputStream is1 =
Test.class.getResourceAsStream("config.properties");
System.out.println(is1);//
不为null
第二:在Test.class目录的子目录下,例如:com.x.y 下有类Test.class ,同时在 com.x.y.prop目录下有资源文件config.properties
那么,应该有如下代码:
//前面没有“/”代表当前类的目录
InputStream is2 =
Test.class.getResourceAsStream("prop/config.properties");
System.out.println(is2);//不为null
第三:不在同目录下,也不在子目录下,例如:com.x.y 下有类Test.class ,同时在 com.m.n 目录下有资源文件config.properties
那么,应该有如下代码:
//前面有“/”,代表了工程的根目录
InputStream is3 = Test.class.getResourceAsStream("/com/m/n/config.properties");
System.out.println(is3);//不为null
ClassLoader.getSystemResourceAsStream 用法:
和className.class.getResourceAsStream 的第三种取得的路径一样,但少了“/”
InputStream is4 = ClassLoader.getSystemResourceAsStream("properties/PayManagment_Config.properties");
System.out.println(is4);//不为null
FileInputStream 用法:
和前面的不一样,
一:例如:com.x.y 下有类Test.class ,用上面的三种不同路径取得的结果都是找不到路径:
代码:
FileInputStream fis;
try
{
fis = new
FileInputStream("config.properties");
//fis = new FileInputStream("prop/config.properties");
//fis = new FileInputStream("/com/m/n/config.properties");
//fis = new FileInputStream("com/m/n/config.properties");
System.out.println(fis);
}
catch (FileNotFoundException e)
{
System.out.println("找不到路径");
}
结果都是:找不到路径
为什么呢?
再试试:
一 单独的类:
String projectPath = System.getProperty("user.dir");//main方法取得的是当前项目路径
//System.out.println(projectPath);
fis = new FileInputStream(projectPath +
"/src/com/m/n/config.properties");
System.out.println(fis);//不为空了
二:
但是我在做rcp项目时,System.getProperty("user.dir");取得的路径就是D:/Program Files/eclipse, 我的eclipse 安装路径,所以我把资源文件直接放eclipse目录底下
fis = new
FileInputStream("config.properties");
System.out.println(fis);//不为空了
不知道为什么?现在只是知道了这几种方法肯定有一种适合,但还是有点模糊不清,望懂得的人指点。
//前面没有“/”代表当前类的目录
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。