`
须等待
  • 浏览: 210801 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java读取Classpath文件

    博客分类:
  • Java
阅读更多
Classloader是从classpath中读取资源的一个类,一般我们用classloader来加载class,实际上,但凡是处在classpath中的文件,我们称之为资源,都可以用classloader来读取。

在java中的API里,有两种方式来使用classpath读取资源。
System.out.println(Bootstrap.class.getResource(""));
System.out.println(Bootstrap.class.getResource("/"));
System.out.println(Bootstrap.class.getClassLoader().getResource(""));
System.out.println(Bootstrap.class.getClassLoader().getResource("/"));
System.out.println(Bootstrap.class.getResource("name.properties"));
System.out.println(Bootstrap.class.getResource("/name.properties"));
System.out.println(Bootstrap.class.getClassLoader().getResource("name.properties"));


class里有一个getResource方法,classloader类里也有getResource方法,这两种API都可以从classpath中读取资源,但是也有一些区别。

class的getResource方法实际上也是用classloader来读取资源,但是起始路径不一样
System.out.println(Bootstrap.class.getResource(""));

这个API的起始路径是当前类的路径,如果要正确的读到资源,目标资源必须和当前class在同一级,或子目录里,可以用相对路径读取到。
System.out.println(Bootstrap.class.getResource("/"));
System.out.println(Bootstrap.class.getClassLoader().getResource(""));

加上/的读取方式,和调用classloader读取是同一个效果,这个读取代表的是某个classpath下的根路径。

System.out.println(Bootstrap.class.getClassLoader().getResource("/"));

这是一种错误的读取方式,使用classloader的时候,不可以指定/来读取。

例:
System.out.println(Bootstrap.class.getResource("name.properties"));
System.out.println(Bootstrap.class.getResource("/name.properties"));
System.out.println(Bootstrap.class.getClassLoader().getResource("name.properties")

第一种读取,代表读取当前类同一级的文件name.properties
第二种和第三种读取等效,都是读取任意classpath根路径下的name.properties文件

Remark
在启动服务的时候,所有的依赖项都是以目录的形式存在在classpath下,这样classloader才能一个一个去加载,而getResource的API里的路径,也都是相对于每一个依赖的目录的路径。
4
0
分享到:
评论
1 楼 leaow567 2013-12-17  
不错,总结的好

相关推荐

    java实现获取指定路径下指定格式的所有文件

    java实现 获取指定路径下 指定格式 的所有文件

    关于classpath

    关于java的classpath补充,详细说明如何配置classpath,如火热让javac正确编译运行java文件

    java 读取csv文件

    java 语言读取csv文件,避免导入Excel时出现的单元格取值的问题

    Java读取本地json文件及相应处理方法

    今天小编就为大家分享一篇Java读取本地json文件及相应处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Java中的classpath

    不清楚classpath不会知道java如何定位你的类文件。  CLASSPATH是一个环境变量,使Java定位用户定义的类。在Windows中,可以在系统属性->高级->环境变量中设置它。  Windows可以输入 echo %CLASSPATH%查看设置...

    浅谈web项目读取classpath路径下面的文件

    主要介绍了浅谈web项目读取classpath路径下面的文件,具有一定借鉴价值,需要的朋友可以参考下

    Java 读取类路径下的资源文件实现代码

    主要介绍了Java 读取类路径下的资源文件实现代码的相关资料,主要实现工具类代码ResourceLoadUtil.java的实例需要的朋友可以参考下

    Java动态编译Java代码,运行在内存中,并执行

    传入JavaFileObject的java文件,是个集合,创建JavaSourceObject实现这个接口,Kind.SOURCE.extension = '.java' * 7.创建任务并执行 * 8.获取执行完成后的返回JavaClassObject类 * 9.创建DynamicClassLoader来...

    java jdk8 学习笔记

    同样,使用命令行指定classpath的方式优先于从系统读取classpath环境变量。 7.jar文档(java archive)采用的是zip格式压缩。 8. 也就是说执行javac命令时会执行到java命令。javac需要某个路径来编译当前文件,...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-056-Java基本语法-获取当前系统的字符编码.avi 北京动力节点-Java编程零基础教程-057-Java基本语法-数据类型-整型.avi 北京动力节点-Java编程零基础教程-058-Java基本语法-数据...

    java环境变量jdk1.8设置

    java环境变量设置,环境变量是操作系统提供的一种机制,用于存储和获取关键信息以方便应用程序和用户。在Java开发中,我们经常需要配置一些环境变量来指定Java运行时的一些参数。 JAVA_HOME:Java安装目录,用于指定Java...

    maven打包后,读取类路径下的配置文件

    maven打包后,读取类路径下的配置文件,pom.xml配置,利用该配置可以成功读取类路径下相应的文件

    自己动手写Java虚拟机 张秀宏 著

    1.2 java命令 1.3 编写命令行工具 1.4 测试本章代码 1.5 本章小结 第2章 搜索class文件 2.1 类路径 2.2 准备工作 2.3 实现类路径 2.3.1 Entry接口 2.3.2 DirEntry 2.3.3 ZipEntry 3 2.3.4 ...

    加载文件资源的三种方式

    加载文件资源的三种方式 ~1.从classpath根目录下加载指定名称的文件 2.从classpath根目录下加载指定名称的文件 3. 从classpath根目录下加载指定名称的文件 4. 获取当前文件的绝对路径

    java根据卡号识别银行

    里面包括一个资源类和一个测试类,需要将银行信息放在classpath下,测试加载spring的配置文件更改成自己的即可运行

    Java Instrumentation Framework.rar

    反射提供的功能,能在运行时(动态)的 ...Instrumentation是Java提供的一个来自JVM的接口,该接口提供了一系列查看和操作Java类定义的方法,例如修改类的字节码、向classLoader的classpath下加入jar文件等。

    JFinal(JAVA 极速WEB ORM框架 ) v3.2.zip

    3、添加ClassPathSource支持从class path及jar包读取模板文件 4、模板引擎添加extension method功能 5、ActiveRecordPlugin支持自动类型转换 6、添加 IDbProFactory,支持继承 DbPro 来定制 DbPro 功能 7、文件...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    2.1.3 jvm(java)与classpath 27 2.1.4 编译程序(javac)与classpath 30 .2.2 管理原始码与位码文档 31 2.2.1 编译程序(javac)与sourcepath 31 2.2.2 使用package管理类 33 2.2.3 使用import偷懒 36 2.3 ...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

Global site tag (gtag.js) - Google Analytics