使用getResourceAsStream
很多时候都要读取文件,于是想到了getResourceAsStream
这是网上说的:
在使用Class.getResourceAsStream 时, 资源路径有两种方式, 一种以 / 开头,则这样的路径是指定绝对
路径, 如果不以 / 开头, 则路径是相对与这个class所在的包的。
在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径。
于是自己写个demo来实践下
代码
package jdk.resource;
import java.io.InputStream;
/**
* @author <a href="mailto:zhangting@taobao.com">张挺</a>
* @since 2010-3-26 11:19:04
*/
public class GetFileDemo {
public static void main(String[] args) {
GetFileDemo demo = new GetFileDemo();
InputStream stream = demo.getClass().getResourceAsStream("/a.txt");
try {
System.out.println(stream.available());
} catch (Exception e) {
System.out.println("can't find file");
}
InputStream stream1 = GetFileDemo.class.getResourceAsStream("/a.txt");
try {
System.out.println(stream1.available());
} catch (Exception e) {
System.out.println("can't find file");
}
InputStream stream2 = ClassLoader.getSystemResourceAsStream("a.txt");
try {
System.out.println(stream2.available());
} catch (Exception e) {
System.out.println("can't find file");
}
}
}
a.txt的路径为classpath的根目录。
class如果不加"/"就会以当前路径为主,以相对路径方式,意味着我不加"/"会查找jdk/resource/a.txt
如果加了"/"就会从classpath下查找
ClassLoader的查找默认就是以classpath开始的绝对路径,不能加"/",否则会找不到文件