zoukankan      html  css  js  c++  java
  • Java Class 利用classpath来获取源文件地址

    利用classpath来获取源文件地址

    @author ixenos

    应用场景


    			Properties props = new Properties();
    
    			/**
    			 * . 代表java命令运行的目录
    			 * 
    			 * 在java项目下,. java命令的运行目录从项目的根目录开始
    			 * 
    			 * 在web项目下, . java命令的而运行目录从tomcat/bin目录开始 所以不能使用点.
    			 */
    			// InputStream in = new FileInputStream("./src/db.properties");
    
    			/**
    			 * 使用类路径的读取方式 / : 斜杠表示classpath的根目录
    			 * 在java项目下,classpath的根目录从bin目录开始
    			 * 在web项目下,classpath的根目录从WEB-INF/classes目录开始
    			 */
    			InputStream in = JDBCUtil.class.getResourceAsStream("/db.properties");
    
    			// 加载文件信息
    			props.load(in);
    

    注意:

    1. 放在src下的文件会随同class文件自动拷贝到Java项目的bin目录中、或者web项目的WEB-INF/classes目录下

    2.   而这里如果使用 【. 相对路径】则出错,因为,【.java】命令的运行目录在Java项目中是bin,且编译后的class文件放在bin中,而在web项目中虽是tomcat/bin,但web项目编译后得到的class文件放在WEB-INF/classes目录中,这样就导致相对路径出错!

    3.   不过classpath在java和web中就有了不同的实现:

        在java项目下,classpath的根目录从bin目录开始
        在web项目下,classpath的根目录从WEB-INF/classes目录开始

       因此可以利用class文件的相对路径来获取我们原来放在src中的被拷贝的文件

    4.   下面是Class类中getResourceAsStream方法的描述:

    Finds a resource with a given name. The rules for searching resources associated with a given class are implemented by the defining class loader of the class. This method delegates to this object's class loader. If this object was loaded by the bootstrap class loader, the method delegates to ClassLoader.getSystemResourceAsStream.

    简单说,就是利用类加载器对classpath的访问,把相关文件放在类文件的相对路径,相关文件使用流来访问和修改

  • 相关阅读:
    ctf web 百度杯”CTF比赛 九月场Upload i春秋
    ctf web 西普实验吧 登陆一下好吗 MySQL隐式转化 MySQL表达式的计算顺序
    Firefox 47.0.1
    给数组原型添加方法
    JS中几种常见的数组算法(前端面试必看)
    进制转换技巧解析
    redis通过6379端口无法连接服务器
    阿里云图片或文件上传 启动时报Error creating bean with name 'ossClient'问题
    20170628-三七互娱-测试工程师(提前批)
    20170514-vivo-软件工程师Java(提前批)
  • 原文地址:https://www.cnblogs.com/ixenos/p/6292217.html
Copyright © 2011-2022 走看看