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的访问,把相关文件放在类文件的相对路径,相关文件使用流来访问和修改

  • 相关阅读:
    【Android
    梦想责任与团队
    在MySQL字段中使用逗号分隔符
    session_write_close() 用法
    课程-问题分析与解决
    团队管理:新业务团队如何结合绩效来度量开发目标
    Linux sort 排序 去重 统计
    nginx-404与fastcgi_intercept_errors指令
    nginx fastcgi_buffers to an upstream response is buffered to a temporary file
    10年软件开发中获得的最宝贵的经验!非常值得你一读
  • 原文地址:https://www.cnblogs.com/ixenos/p/6292217.html
Copyright © 2011-2022 走看看