ServletContext_资源文件(资源在classes目录下的某个包中)

/*
如果资源文件在某个包下面
即:读取类路径下面的某个包下面的资源文件
    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();

你可能感兴趣的:(ServletContext_资源文件(资源在classes目录下的某个包中))