• 框架的概念及用反射技术开发框架的原理<br/>getResourceAsStream用法详解


    反射的作用—>实现框架的功能

    框架-用户类-工具类:框架与工具类有区别,工具类被用户的类调用,而框架则是调用用户提供的类。

    框架要解决的核心问题:框架如何调用未知的类:通过反射来实现

    综合案例: 使用配置文件读取调用类的名字

    工程目录

     

    ReflectTest测试类

    1 package com.ljq.test;
    2
    3 import java.io.FileInputStream;
    4 import java.io.InputStream;
    5 import java.util.Collection;
    6 import java.util.Properties;
    7
    8  /**
    9 * 使用配置文件读取调用者的类
    10 *
    11 * @author jiqinlin
    12 *
    13 */
    14  public class ReflectTest {
    15 public static void main(String[] args) throws Exception{
    16 //使用绝对路径,否则无法读取config.properties
    17 //InputStream inStream=new FileInputStream("F:\\android\\test\\src\\com\\ljq\\test\\resource\\config.properties");
    18
    19 //ReflectTest.class.getClassLoader().getResourceAsStream(String path): 默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。
    20 //InputStream inStream = ReflectTest.class.getClassLoader().getResourceAsStream("com/ljq/test/resource/config.properties");
    21
    22 // ReflectTest.class.getResourceAsStream(String path): path不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。
    23 //其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。
    24 //InputStream inStream = ReflectTest.class.getResourceAsStream("/com/ljq/test/resource/config.properties");
    25
    26 //config.properties配置文件所在目录是ReflectTest类所在子目录,才可以;否则报空指针异常
    27   InputStream inStream = ReflectTest.class.getResourceAsStream("resource/config.properties");
    28
    29 Properties props=new Properties();
    30 props.load(inStream);
    31 inStream.close();
    32
    33 String className=props.getProperty("className");
    34 Collection collection=(Collection)Class.forName(className).newInstance();
    35 collection.add("123");
    36 System.out.println("size="+collection.size()); //size=1
    37   }
    38 }

    config.properties配置文件

    className=java.util.HashSet

    getResourceAsStream用法大致有以下几种:

    1 第一:要加载的文件和.class文件在同一目录下,例如:com.ljq.test目录下有类ReflectTest.class,同时有资源文件config.properties
    2
    3 那么,应该有如下代码:
    4 ReflectTest.class.getResourceAsStream("config.properties");
    5
    6 第二:在ReflectTest.class目录的子目录下,例如:com.ljq.test下有类ReflectTest.class,同时在com.ljq.test.resource目录下有资源文件config.properties
    7
    8 那么,应该有如下代码:
    9 ReflectTest.class.getResourceAsStream("resource/config.properties");
    10
    11 第三:不在ReflectTest.class目录下,也不在子目录下,例如:com.ljq.test下有类ReflectTest.class ,同时在com.ljq.resource目录下有资源文件config.properties
    12
    13 那么,应该有如下代码:
    14 ReflectTest.class.getResourceAsStream("/com/ljq/resource/config.properties");
    15
    16 总结一下,可能只是两种写法
    17
    18 第一:前面有 “/” ,“/”代表了工程的根目录,例如工程名叫做test,“/”代表了test
    19 ReflectTest.class.getResourceAsStream("/com/ljq/resource/config.properties");
    20
    21 第二:前面没有 “/” ,代表当前类的目录
    22 ReflectTest.class.getResourceAsStream("config.properties");
    23 ReflectTest.class.getResourceAsStream("resource/config.properties");
    24
    25 最后,总结
    26 getResourceAsStream读取的文件路径只局限在工程的源文件夹中,包括在工程src根目录下,以及类包里面任何位置,但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的。
  • 相关阅读:
    【转】程序员杂志:2011程序员薪资调查报告
    过滤HTML格式
    学习ASP.NET中的细节问题
    自己写的一些类代码
    "rs.open sql,conn,1,3 "的1,3的用处
    无须重装 Windows常遇问题通用解决方法
    Vista Beta下载
    asp学习
    SharePoint 和RMS装在同一台机器上可以么?
    介绍SharePoint与RMS集成的两篇重磅文章
  • 原文地址:https://www.cnblogs.com/linjiqin/p/1954647.html
Copyright © 2020-2023  润新知