- 浏览: 424701 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (239)
- java (59)
- JQuery (5)
- oracle (12)
- javascript (14)
- struts1 (1)
- spring (10)
- Quartz (2)
- ibatis (1)
- linux (32)
- weblogic (3)
- ibaits (2)
- servlet (1)
- log4j (5)
- 编程人生 (2)
- apache (3)
- window (3)
- web前端 (25)
- 错误集合 (2)
- 框架配置 (1)
- 开发工具 (15)
- 小插件应用 (1)
- lucene (1)
- sonar (1)
- velocity (1)
- 代码检查 (0)
- error (1)
- jndi (1)
- oracle函数 (1)
- tools (1)
- 代码管理 (3)
- mysql (4)
- maven (9)
- bat (1)
- git (3)
- aix (2)
- freemarker (1)
- svn (2)
- nginx (6)
最新评论
-
masuweng:
f
修改eclipse的内存 -
洞渊龙王:
...
maven-surefire-plugin学习 -
phf717601206:
WEB-INF/lib下就没有servlet-api.jar ...
Unable to read TLD "META-INF/c.tld"错误 -
sziitjiang:
很好,非常不错
Java读写excel之poi -
dengminghua1016:
doris1bruce 写道一、二、 ...
java创建对象的几种方式
java如何找到项目中的资源文件
举一个简单例子说明
资源文件内容
public class Test1 {
public static void main(String[] args) {
/**
* 方法一
* 当我们写路径的时候,需要注意
*1.资源文件db.properties放在ClassPath下(src目录中)
* 我们需要加"/",可以理解为在ClassPath下寻找
*
*
*/
InputStream in = Test1.class.getResourceAsStream("/db.properties");
/**方法二
*当采取这种方法时 ,不需要加"/",默认在ClassPath下查找
*
*
* InputStream in = Test1.class.getClassLoader().getResourceAsStream("db.properties");
*
*/
Properties prop = new Properties();
try {
prop.load(in);
} catch (IOException e) {
e.printStackTrace();
}
String username = prop.getProperty("username");
String password = prop.getProperty("password");
System.out.println("用户名"+username+"密码"+password);
}
}
加载资源文件比较常用的有两种:
一、用ClassLoader,说到这里就不得不提一下ClassLoader的分类,java内置的ClassLoader主要有三种,
第一种是根类加载器(bootstrap class loader),用C++来编写,负责将一些关键的Java类,如java.lang.Object和其他一些运行时代码先加载进内存中。 所负责加载的包:BootStrp------>JRE/lib/rt.jar
第二种是扩展类加载器(ExtClassLoader),由java类编写,负责将JRE中的一些类加载进内存中。所负责加载的包: ExtClassLoader---------->JRE/lib/ext/*.jar
第三种是应用类加载器(AppClassLoader)或者叫做系统类加载器,负责将CLASSPATH中的类加载到内存中。可以通过ClassLoader.getSystemClassLoader()来获取应用类加载器;
再来所说加类载器的继承,类加载器不是垂直继承的父子关系,而是一种组合关系,可以通过实例化类加载器时,将父类加载器的实例作为构造参数传到类加载器中。
关于类加载器的详细资料,可以自行搜索。
获取到应用类加载器之后,就是获取资源文件了,调用loader.getResource(path)可以加载相应路径下的资源文件,不能以‘/’开头,关于包内的资源可以把包当做普通的文件夹,以'/'分隔每个包。
如:URL url2 = ClassLoader.getSystemClassLoader().getResource("demo/names.ser");是获取demo包内的names.ser序列化文件。
二、用需要加载的当前类的getResource方法来加载,其实这个方法也是调用的加载这个类的类加载器来获得资源文件的,只不过是获取的参数不同。
(1)要想获取class所在包内的文件可以用相对路径直接访问包内的资源;如:Demo1.class.getResource("names.ser");获取的是Demo1的class文件所在包内的资源
(2)要想获取包外的资源文件必须以‘/’开头,如URL url = Demo1.class.getResource("/demo/names.ser");获取的是demo包内的names.ser文件
其实第二种方式是对第一种方式的一个封装,都是用的ClassLoader来加载的资源文件。为什么这么说呢?看一下Class类的源码就知道:
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); }
private String resolveName(String name) { if (name == null) { return name; } if (!name.startsWith("/")) { Class c = this; while (c.isArray()) { c = c.getComponentType(); } String baseName = c.getName(); int index = baseName.lastIndexOf('.'); if (index != -1) { name = baseName.substring(0, index).replace('.', '/') +"/"+name; } } else { name = name.substring(1); } return name; }
getResource根据传进来的name值(即相对路径或者绝对路径的形式),我们看到经过resolveName处理之后就调用了ClassLoader c1进行了加载,ClassLoader的加载路径的形式是不以‘/’开头的相对路径,那肯定是resolveName把路径转换了一把,再看看resolveName方法,首先判断是不是以‘/’开头,如果以‘/’开头,则为相对路径,否则就是绝对路径,注意else这个代码块,它将第一个字符去除掉了,确实去除掉之后就符合了ClassLoader的加载路径,而if块中就根据把当前类的包路径截取,然后将.替换成了'/',并添加上那段相对路径,也形成了符合ClassLoader的加载路径。
发表评论
-
org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.ap解决方案
2014-05-09 09:24 860是tomcat的lib文件夹jar包和项目的lib文件下的j ... -
基于mock对象和JUnit框架简化Spring Web组件单元测试(1)
2014-03-13 14:25 1786对于Java组件开发者来说,他们都盼望拥有一组能够对组件开 ... -
org.apache.taglibs.standard 转换成javax.servlet.jsp.tagext异常
2014-02-23 14:29 960java.lang.ClassCastExceptio ... -
acegi源码分析
2014-02-17 11:42 743AbstractProcessi ... -
深入研究java.lang.ThreadLocal类
2014-02-13 14:19 494一、概述 ThreadLocal是什么呢?其实Thr ... -
java synchronized详解
2014-02-13 09:38 725Java语言的关键字,当它用来修饰一个方法或者一个代码块的时 ... -
如何使用ide打jar包以及如何在cmd运行jar包
2013-12-02 00:05 1098一、怎么打jar包 第一步:选中要打jar包的工程 第二 ... -
window下Java环境配置
2013-08-29 13:54 4241.打开我的电脑--属性--高级--环境变量 ... -
Unable to read TLD "META-INF/c.tld"错误
2013-08-12 17:50 14232严重: Servlet.service() for ser ... -
According to TLD or attribute directive in tag file, attribute value does not ac
2013-07-28 23:39 15739jsp编译的时候失败,原因是servlet版本与jstl标 ... -
使用velocity启动项目报错
2013-05-21 12:12 11266启动tomcat时,出现 2007-3-15 16:42 ... -
文件解压和压缩
2013-04-14 20:42 956文件解压和压缩 /** * compress ... -
java操作properties属性文件
2013-04-14 20:40 1139java更新或增加 ... -
JAVA基本数据类型
2013-04-11 11:30 0数据类型 大小 范围 ... -
JAVA应用 之 排序
2013-02-25 10:36 870概述: 1.本文阐述对List(Array乱入)的 ... -
JAVA基础 之 Map
2013-02-25 10:27 951概述: 1.键值对,key-value,具有映射关 ... -
JAVA基础 之 Collections
2013-02-25 10:24 1274概述: 1.Collec ... -
java基础之异常
2013-02-25 09:55 927讲述: 1.五个关键字 1.tr ... -
java实现缓存技术
2013-01-27 12:48 0java实现缓存技术,有时候我们需要将一些数据缓存起来,什么时 ... -
java创建对象的几种方式
2013-01-27 10:13 6367(1) 用new语句创建对象,这是最常见的创建对象的方法。 ...
相关推荐
- 通常,Java项目有一个标准的目录结构,如`src/main/java`用于存放Java源代码,`src/main/resources`用于存放资源文件,如配置文件、图片或文本文件等。如果你的文件直接放在`src`目录下,可能意味着它是在源代码...
在Java编程中,读取资源文件是常见的任务,特别是在配置应用程序、处理文本数据或加载本地化内容时。本文将深入探讨如何使用Java读取资源文件,特别是properties类型的文件。 资源文件通常存储在项目的类路径...
Android的apk文件反编译后,甚多的资源和java文件无法对应,java文件中引用的资源id变成十进制数字。本文将反编译apk的java文件和资源文件重新关联引用对应,使得java文件能准确无误地重新引用资源文件。 (1)将反...
将Java项目打包成可执行文件是一项常见的需求,尤其是在部署应用程序到非开发环境时。通过将Java项目转换为可执行文件(.exe),可以方便地在Windows操作系统上运行,无需用户安装Java运行环境(JRE)。本文将详细...
对于提供的"Java项目开源源码2023最新资源.docx"文件,这是一个可能包含项目列表、介绍或指南的文档。打开这个文档,你可以找到具体的项目链接,从而开始你的学习之旅。务必充分利用这些宝贵的资源,它们将是你成为...
这个项目的目标是创建一个类似Windows资源管理器的应用,能够显示本地文件系统的内容,支持文件和目录的浏览、创建、删除、重命名等基本操作。 首先,我们需要了解Java中的核心类库`java.io`,它提供了处理输入/...
如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>jcifs <artifactId>jcifs <version>1.1.11 ``` 如果是非Maven项目,可以手动下载jcifs-1.1.11.jar文件并将其添加到项目的类路径中。 *...
总的来说,Java 文件管理器是一个综合运用了多种Java核心技术的项目,它展示了如何利用Java来构建功能完备、界面友好的桌面应用程序。对于学习Java GUI编程或文件操作的开发者来说,这是一个极好的学习资源。
以下是从给定文件中整理出的Java资源网站大全,这些网站不仅提供了丰富的学习资料,还涵盖了最新的技术动态、实践案例以及开发者社区,对Java学习者来说极为宝贵。 ### 1. Sun Developer Network (SDN) Home 网址...
- 如果你的资源文件是Java项目的一部分,你可以在类路径中直接导入它们,然后使用`getClass().getResource()`或`getClass().getResourceAsStream()`方法。 4. 文件系统访问 - 如果资源文件位于文件系统的某个位置...
在这个项目中,开发者可以学习到如何利用Java的内置库来解析音频文件的元数据,包括音频的总播放时间。 首先,我们要关注的是`java.io`和`javax.sound.sampled`这两个Java核心包,它们提供了处理音频文件的基本功能...
在Eclipse中,你需要通过“项目|属性”->“Java Build Path”->“Libraries”来添加SuperMap iObjects Java提供的jar包。确保导入`com.supermap.data.jar`,这是解析DWG文件的关键库。 **运行第一个示例程序** 1....
"JAVA项目实践合集"是一个综合性的资源集合,包含了多个Java项目的源代码和实践案例,旨在帮助学习者提升Java编程技能并了解实际项目开发过程。这个压缩包中的内容广泛,涵盖了从基础到进阶的各个层面,对于Java初学...
这将解析文件中的任务、资源、日历和其他项目属性,并将它们映射到Java对象。 ```java ProjectFile projectFile = new ProjectFile(); projectFile.read(new File("path_to_your_file.mpp")); ``` 2. **访问项目...
不同环境下(如开发环境与运行环境)类加载器的搜索路径可能不同,这会导致资源文件无法被正确找到。 ##### 2.2 解决方案 为了解决上述问题,我们需要采取以下步骤: 1. **确保资源文件正确放置**:确保所有图片...
- **资源文件**:除了Java类文件外,还可以将资源文件(如图片、配置文件等)一起打包进JAR文件中,只需确保它们放在正确的目录下。 - **环境兼容性**:考虑目标运行环境的Java版本,确保JAR文件能够在该版本上顺利...
在Java开发过程中,将项目打包成JAR(Java Archive)文件是常见的操作,这有助于将源代码、资源文件和依赖库整合到一个可执行的独立文件中,方便分发和运行。MyEclipse作为一款强大的Java集成开发环境,提供了简单...
Java实战项目中的“bin”部分通常包含了项目的可执行文件、编译后的类文件以及相关的配置文件。这个压缩包文件的名称列表中只有一个“bin”,这可能意味着它包含了一系列项目的二进制输出目录。在Java开发中,"bin...