zoukankan      html  css  js  c++  java
  • java中资源的定位

    java中的资源

    操作系统中的文件一般都叫做资源,例如图片、文本文件、视频、音频等等。在java平台中获取这些文件或者定位这些文件可以通过java语言本身的一些API,例如File、InputStream、OutputStream等等。

    在java平台中如果直接通过文件系统API来定位文件会比较不灵活,为了方便起见java平台可以结合操作系统的环境变量以及jvm参数来设置一些特定的资源位置,利用这些参数,再对文件系统的API进行封装,为用户提供一些更为简单方便的资源定位的API 。例如Class对象中的getResource()方法或者类加载器中的getResource()方法。

    Class对象的getResource(“”)方法,获取到的是当前类所在的目录,如果参数是"/"即getResource("/")获取的是类路径(当前类加载器要加载的类所在的路径)

    类加载器的getResource("")方法,获取的是当前类加载器要加载的类所在的路径,如果类加载器的getResource("/"),返回的是null

    在资源定位时,还可以使用java中的URL类,这个类不仅仅可以定位本地文件系统中的资源,还可以定位网络中的资源。根据不同资源定位处理器,可以根据不同的协议处理不同的资源。

    一般支持的协议有   file:  http:/https:  jar:  等协议。

    获取资源位置 

    public static void showURL() throws IOException {
    
             /**
              * Class类的getResource()
              * 第一种:获取类加载的根路径   D:workspacealgorithm-pro	argetclasses
              */
             File f = new File(URLReadJar.class.getResource("/").getPath());
             System.out.println(f);
    
             /**
              * Class类的getResource()
              * 获取当前类的所在工程路径; 如果不加“/”  获取当前类的加载目录  D:workspacealgorithm-pro	argetclassescom
    esourcelocation
              */
             File f2 = new File(URLReadJar.class.getResource("").getPath());
             System.out.println(f2);
    
             /**
              * 第二种:获取项目路径    D:workspacealgorithm-pro
              * 也可以采用System中的getPropertry("user.dir")获取项目路径
              */
             File directory = new File("");// 参数为空
             String courseFile = directory.getCanonicalPath();
             System.out.println(courseFile);
    
     
             
            /**
             * 类加载器的的getResource()
             * 第三种: file:/D:/workspace/algorithm-pro/target/classes/
             *  注意此处用的是 类加载器 的getResource(),获取的是当前类加载器的工作目录
             *  URLReadJar的类加载器,其实就是应用程序类加载器,也叫系统类加载器。
             */
             URL xmlpath = URLReadJar.class.getClassLoader().getResource("");
             System.out.println(xmlpath);
    
     
              
             /**
              * 结果:D:workspacealgorithm-pro
              * 获取当前工程路径
              */
             System.out.println(System.getProperty("user.dir"));
             
    
             /**
              *  获取所有的类路径 包括jar包的路径 D:workspacealgorithm-pro	argetclasses
              */
             System.out.println(System.getProperty("java.class.path"));
             
    
    
         }
         

    配置文件中的classpath与classpath*的区别


    无论是maven项目还是普通的java工程都会有个src目录,这个目录中存放着项目的java文件和配置文件。web项目src目录下的文件在编译后会放到WEB-INF/classes,非web项目src目录下的文件在编译后会放到classes/。classpath所对应的路径指的就是WEB-INF/classes(或者classes/)
    classpath 和 classpath* 区别:
    classpath:只会到你的class路径中查找找文件;
    classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.
    
    用classpath*:需要遍历所有的classpath,所以加载速度是很慢的,因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用 classpath*


    参考:
    https://www.jianshu.com/p/0dd322e51516
  • 相关阅读:
    Git入门
    基于sendmail的简单zabbix邮件报警
    zabbix agentd安装
    我整理的一份来自于线上的Nginx配置(Nginx.conf),希望对学习Nginx的有帮助
    【转载】Spring Boot引起的“堆外内存泄漏”排查及经验总结
    lodop+art-template实现web端漂亮的小票样式打印
    《阿里巴巴Java开发手册》改名《Java开发手册》,涵盖史无前例的三大升级
    Spring Boot的学习之路(02):和你一起阅读Spring Boot官网
    Spring Boot的学习之路(01):缘起
    『 效率工具 』Spring Boot版的轻量级代码生成器,减少70%以上的开发任务
  • 原文地址:https://www.cnblogs.com/cplinux/p/14052914.html
Copyright © 2011-2022 走看看