`

java资源获取分析

阅读更多
  在开发java程序的历程中,我们经常要做的一件事就是获取资源。那么什么是资源呢?说白了,在盘算机里那就是一堆数据。只是这堆数据对我们的java程序有多种表现 情势,一般来说有File,URL,InputStream等等。而单就文件这一项就有很多种:配置文件,java类文件,jps文件,图片、css、js文件等等。面对这林林总总的资源,我们在设计一个读取资源的接口时,就需要 针对不同情势的资源供给法子 ,这样就导致我们的接口还是与实际的资源情势绑定在一起,未能完整的抽象。另外,在java程序中资源的寄放地位也是各异的。有的寄放在classpath中,有的寄放在文件系统 中,有的寄放在web利用中。而对于不同地位的资源,java程序获取这些资源的法子 各有不同。

    A、获取classpath中的资源:

    代码

 
  URL url = this.getClass().getResource("resource_name");

    URL url = this.getClass().getClassLoader().getResource("resource_name");

    URL url = Thread.currentThread().getContextClassLoader().getResource("resource_name");
    甜性涩爱

    那么在jdk中为什么又供给了三种法子 来获取classpath下的资源呢?这其中是有些来头的。

    第一行代码中是利用 Class类的实例来获取,第二行代码是应用加载当前类的classloader来获取。看下jdk中的源代码会创造class类的实例最后还是委托加载他的classloader来获取资源的。

    代码

    public java.net.URL getResource(String name) {

    name = resolveName(name);

    ClassLoader cl = getClassLoader0();

    if (cl==null) {

    // A system class.

    return ClassLoader.getSystemResource(name);

    }

    return cl.getResource(name);

    }

    从上面的代码中可以看出,对于资源的加载并没有像类加载所采纳的双亲委托机制。而是当前类的classloader不为null的情况 下先从当前类的classloader中加载资源。而只有当前类的classloader为null的时候才从system classloader中去加载资源。这样可以方便 我们自定义配置类笼罩一些默认配置。当然,j2se利用中如果没有特别 定制classloader时,我们自己写的类都是被system classloader加载的。到底利用 class去获取资源和利用 classloader去获取资源有什么差别呢?差别就在 resolveName(name)这个法子 中。两种法子 对于资源名称的表现法子 不同。下面是一个简略的包结构 ,/表现类路径的根

    /

    |-com.cn.test

    |-Test.class

    |-test2.txt

    |-test1.txt

    Java代码

    // 获取与当前类在同一个包下的资源
    URL url1 = this.getClass().getResource("test2.txt");
    // 获取com.cn.test包下的资源,需加/

  
 URL url2 = this.getClass().getResource("/com/cn/test/test2.txt");

    // 获取类路径根下的资源

  
 URL url3 = this.getClass().getClassLoader().getResource("test1.txt");
    // 获取包com.cn.test包下的资源

  
 URL url4 = this.getClass().getResource("com/cn/test/test2.txt");

    而第三利用 当前线程的contextClassLoader来获取资源的解释 可以参考我的另一篇

    B、获取文件系统 中的资源

    Java代码

 
  // 1、获得File对象

  File file = new File("test.txt");  
 // 2、获得File对象的字节流

    InputStream in = new FileInputStream(file);

    值得注意的是在File的结构函数File(String name) 中的name参数可以是相对路径和绝对路径。相对路径是相对于System.getProperties("user.dir")的。

    C、获取web利用中的资源

    Java代码

 
  servletContext.getResourceAsStream(resource_name);
    resource_names为相对于webroot的路径表现。例如获取web.xml,resource_name表现为"/WEB-INF/web.xml"

    面对上面介绍的各种资源表现 情势和寄放地位,难道java中就没有供给一个统一处理 法子 吗?有,java.net.URL。

    从名称上来看 URL(Uniform Resource Locator) 统一资源定位器。看起来很好很强大。但很多时候应用它并不能定位到我们需要 的资源。

    首先,它jdk中体统的URL能造访的非常有限(当然可以进行扩张,不过很麻烦);常用的有http,file,ftp等等。并没有供给对classpath和servletContext中的资源的获取法子 。

    另外,它没有供给确定 资源是否存在的法子 。每次只有等我们真正去获取资源的时候抛出异常才干知道资源无法获取。

    其次,URL这个类的职责未划分明确,既用来表现资源有用来获取其资源。

分享到:
评论

相关推荐

    JAva资源网站大全

    以下是从给定文件中整理出的Java资源网站大全,这些网站不仅提供了丰富的学习资料,还涵盖了最新的技术动态、实践案例以及开发者社区,对Java学习者来说极为宝贵。 ### 1. Sun Developer Network (SDN) Home 网址...

    语法分析器 Java

    通过这个"Java编辑的语法分析器",开发者可以获得即时的语法反馈,提高编码效率,减少调试时间。对于学习编译器原理和实践的人来说,这样的工具也是极好的学习资源。同时,这个工具也可以作为IDE(集成开发环境)的...

    javacore分析工具

    JavaCore分析工具是一种在Java应用程序出现问题时,如CPU占用过高或出现Out Of Memory (OOT)错误时,用于诊断和分析的利器。它主要用于Java虚拟机(JVM)的故障排查,尤其是在使用像Websphere或Weblogic这样的企业级...

    基于JavaParser的代码调用链分析,可以用于分析Java代码的方法调用链.zip

    总的来说,这个压缩包提供的资源对于理解和实践Java代码的调用链分析非常有帮助,无论是初学者还是经验丰富的开发者,都能从中受益。通过深入学习和应用JavaParser,我们可以更好地理解和优化Java代码,提升软件的...

    java对音频文件的频谱分析

    在Java编程环境中,进行音频文件的频谱分析是一项复杂但重要的任务,特别是在音频处理和音乐信息检索领域。本文将深入探讨如何使用给定的压缩包文件来实现这一目标。 首先,频谱分析是将时域信号转换为频域表示的...

    java案例分析 java 案例 好资源

    在这个“java案例分析”中,我们可以深入理解Java的核心概念和实际应用。这些案例旨在帮助学习者掌握Java编程的关键技巧,提升编程能力。 1. **基础语法与数据类型**:Java的基础包括变量声明、数据类型(如整型、...

    IBM java线程堆栈分析工具

    在IT行业中,尤其是在Java应用程序的开发和调试过程中,理解并分析线程堆栈是非常关键的。线程堆栈反映了程序运行时的线程状态,帮助开发者定位和解决多线程问题,如死锁、资源竞争等。IBM为WebSphere Application ...

    Java线程Dump分析工具jstack解析及使用场景

    Java线程Dump分析工具jstack是Java开发人员和运维人员常用的诊断工具,它能够帮助我们了解Java应用程序中线程的状态,以及线程的执行轨迹。本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的...

    java 实例log分析

    - 时间序列分析:通过分析日志数据的时间分布,可以发现系统的繁忙时段,有助于资源调度和容量规划。 - IP地理位置:结合第三方库,如MaxMind的GeoIP数据库,可以获取客户端IP的地理位置信息,帮助理解用户分布。 ...

    使用java nmon 分析nmon资源

    7. **深入分析**:除了基本的资源使用情况,Java NMON还可以帮助你识别进程消耗资源的状况,找出可能的性能瓶颈。例如,你可以查看哪个进程的CPU占用率最高,或者哪个磁盘的I/O等待时间最长。 通过以上步骤,Java ...

    MAT Eclipse MemoryAnalyzer java性能分析

    在实际操作中,首先我们需要获取Java应用的堆转储文件(通常通过JVM的`jmap`命令或者Java Flight Recorder生成)。然后,使用MAT打开这个文件,进行分析。MAT会解析堆转储,并显示内存概述,包括总内存使用、对象...

    Java,获取汉字拼音、部首、笔画、笔画数目源文件、源码

    在Java编程语言中,处理汉字并获取其相关信息,如拼音、部首、笔画和笔画数目,是一项挑战性但非常实用的任务。这通常涉及到自然语言处理(NLP)和字符编码的理解。以下是对这个主题的详细阐述: 首先,我们要明白...

    java资源参考列表

    "Java资源参考列表"是一个针对Java程序员精心编纂的工具书目清单,由行业权威人士详细整理,旨在为开发者提供全面的学习路径和实用的参考资料。这份列表涵盖了从基础概念到高级技术的各种主题,帮助Java程序员在学习...

    java20套项目资源

    “Java20套项目资源”这一标题明确指出这是一份包含20个项目的Java资源包。这表明该资源可能涵盖了一系列不同的应用场景和技术栈,旨在帮助学习者或开发者快速了解并掌握Java的实际应用。 #### 描述理解 描述部分...

    基于Java的A股量化分析平台源代码+数据库+接口文档,致力于提升个人投资水平及收益

    本资源包含一个基于Java开发的A股量化分析平台的完整源代码、数据库文件以及接口文档,旨在帮助个人投资者提升投资决策的科学性和收益性。以下将详细解释该平台的关键知识点。 1. **Java编程语言**: Java是这个项目...

    JAVA学习资源推荐

    - **知识点**: 此网站提供了一个较为全面的Java资源库,覆盖了从入门到进阶的各种教程和文档。 - **特点**: 内容涵盖了Java SE、Java EE等不同方向,还包括了大量的实战案例分析。 - **适用人群**: 适用于各个层次的...

    基于JAVA的人力资源管理系统

    6. 绩效管理:根据设定的考核标准,评估员工的工作表现,JAVA可以通过算法和数据分析工具,实现公正、客观的绩效评价。 此外,系统设计还需要考虑用户体验,使用Spring Boot、Hibernate等框架可以简化开发,提高...

    Java资源同步Java资源同步Java资源同步

    ### Java资源同步详解 在Java开发中,资源同步是一个非常重要且常见的问题,尤其是在多线程环境中,合理地管理资源能够有效提升程序的稳定性和效率。根据提供的标题与描述,本次将深入探讨“Java资源同步”的相关...

    java线上故障分析-线程dump,堆内存分析

    ### Java线上故障分析:线程dump与堆内存分析 #### 引言 在现代软件开发中,Java作为一门广泛使用的编程语言,在企业级应用、Web服务、大数据处理等多个领域发挥着重要作用。然而,随着系统复杂度的提升,线上环境...

    Mac OS java内存分析工具MAT

    **Mac OS上的Java内存分析工具MAT** 在Java应用程序开发中,内存管理是至关重要的,特别是对于大型、长期运行的应用程序,内存泄漏可能导致性能下降甚至系统崩溃。为了有效地诊断和解决这些问题,开发人员需要借助...

Global site tag (gtag.js) - Google Analytics