/*
如果资源文件在某个包下面
即:读取类路径下面的某个包下面的资源文件
ClassLoader loader = ServletContextDemo4.class.getClassLoader();//获取到了装载该类的类装载器(也是装载所有的类的类装载器)
loader.getResourceAsStream("");//类装载器是用来装载classes目录的,而db.properties
所以:InputStream in = loader.getResourceAsStream("cn/it/servlet/db.properties");
//使用Properties对象读取properties文件
Properties pro = new Properties();
prop.load(in);//将一个流加载到Properties对象中去
prop.getProperty("name");//通过键获取值
prop.getProperty("url");
//。。。。。。。
//通过类装载器装载数据的时候装载一个资源文件,如果资源文件过大,超过javaVM的
默认内存,将会出现内存溢出
所以用类装载器装载的时候,只能装载小的文件。
使用类装载器装载的资源文件只装载一次。
那么对于大文件如何读取的问题? (不用类装载器,因为文件太大)
//获取文件名
String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");//得到绝对路径
//截取文件
path.lastIndexOf(''\\");
String filename = path.subString(path.lastIndexOf("\\")+1);//拿到文件名
InputStream In = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");//ServletContext代表的是整个web应用,而“/”代表的是web应用
byte[] buff = new byte[1024];
int len = 0;
FileOutputStream out = new FileOutputStream("e:\\"+filename);
while((len=in.read(buff))!=-1){
out.write(buff,0,len);
}
in.close();
out.close();
转载于:https://my.oschina.net/cys21/blog/495967