转载:http://riddickbryant.iteye.com/blog/436693
首先,Java中的getResourceAsStream有以下几种:
1. Class.getResourceAsStream(String path) : path
不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由
ClassLoader获取资源。
2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。
3. ServletContext. getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓,当然这和具体的容器实现有关。
4. Jsp下的application内置对象就是上面的ServletContext的一种实现。
其次,getResourceAsStream 用法大致有以下几种:
第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类me.class ,同时有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("myfile.xml");
第二:在me.class目录的子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("file/myfile.xml");
第三:不在me.class目录下,也不在子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml
那么,应该有如下代码:
me.class.getResourceAsStream("/com/x/file/myfile.xml");
总结一下,可能只是两种写法
第一:前面有 “ / ”
“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject
me.class.getResourceAsStream("/com/x/file/myfile.xml");
第二:前面没有 “ / ”
代表当前类的目录
me.class.getResourceAsStream("myfile.xml");
me.class.getResourceAsStream("file/myfile.xml");
最后,自己的理解:
getResourceAsStream读取的文件路径只局限与工程的源文件夹中,包括在工程src根目录下,以及类包里面任何位置,但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的。
错误:
class.getClassLoader().getResource("*********");这一句抛出空指针异常java.lang.NullPointerException,定位为getClassLoader()返回null
如果一个类是通过bootstrap 载入的,那我们通过这个类去获得classloader的话,有些jdk的实现是会返回一个null的,
解决:
修改代码如下:
-
InputStream inputStream;
-
ClassLoader cl = XXX.
class
.getClassLoader();
-
if
(cl !=
null
) {
-
inputStream = cl.getResourceAsStream(
"xx.properties"
);
-
}
else
{
-
inputStream = ClassLoader.getSystemResourceAsStream(
"xx.properties"
);
-
}
-
Properties dbProps =
new
Properties();
-
dbProps.load(inputStream);
-
inputStream.close();
所以保险起见我们最好还是使用我们自己写的类来获取classloader,这样一来就不会有问题。
分享到:
相关推荐
Java中getResourceAsStream的用法.md
在Java编程中,`getResourceAsStream` 是一个非常实用的方法,用于从类路径或者特定上下文中获取资源流,通常用来读取配置文件、图片、XML文档等静态资源。这个方法在处理与代码打包在一起的非代码文件时非常方便。...
在Java编程中,`getClass().getResourceAsStream()`是一个非常实用的方法,用于从类路径(Classpath)中加载资源,如配置文件、图片、字体等。这个方法返回一个`InputStream`对象,可以通过它读取到资源文件的内容。...
在静态方法中,可以使用 `Test.class.getResource("").getPath()`,而在非静态方法中,可以使用 `this.getClass().getResource("").getPath()` 或 `Test.class.getResource("").getPath()`。这两个方法都可以获取...
### Java工程中资源文件的用法详解 #### 概述 资源文件,通常指的是`.properties`文件,这类文件采用键值对的形式存储数据,广泛应用于Java项目中存储配置信息、国际化字符串等。通过使用`java.util.Properties`类...
使用`getResource()`或`getResourceAsStream()`方法能更好地适应这些变化。 7. **异常处理**: - 在尝试读取文件时,应该始终处理可能出现的异常,如`FileNotFoundException`,确保程序在文件不存在或无法访问时...
本文将详细介绍Java中获取文件路径的各种方法及其应用场景,帮助开发者更好地理解和掌握这些技巧。 #### 二、基本概念 在深入讨论之前,我们需要了解几个基本概念: - **Classpath**: 是Java运行环境的一个重要...
在Java类中,读取配置文件信息可以使用多种方法,其中一种方法是使用`this.getClass().getClassLoader().getResourceAsStream`方法。 `this.getClass().getClassLoader().getResourceAsStream`方法是Java类中的一种...
总之,Java提供了多种方式来读取项目中的资源文件,通过理解类路径和使用适当的IO方法,可以有效地在IDEA环境中加载和处理这些资源,无论是文本、音频还是图片。确保在实际应用中适当地管理和关闭资源,以保持程序的...
在Java中,我们通常使用`ImageIcon`类的构造函数来加载图片。以下代码展示了如何从文件系统中加载图片: ```java String imagePath = "path/to/your/image.jpg"; ImageIcon imageIcon = new ImageIcon(imagePath);...
首先,我们可以通过`java.lang.Class`类的`getResource`或`getResourceAsStream`方法来获取类路径中的资源文件路径。这两个方法都是在类路径中查找资源,返回一个URL对象,从中可以获取路径信息。例如,如果我们有一...
本篇文章将详细探讨Java提供的两种主要方法:`Class.getResource`和`Class.getResourceAsStream`,用于加载类路径下的资源文件。 首先,`Class.getResource`方法返回一个`URL`对象,它表示资源的位置。这个方法接受...
例如,可以在YAML文档中定义嵌套的对象,然后使用Yaml类的load()方法将其加载到Java对象中。 结论 JAVA基于SnakeYAML实现解析与序列化YAML是JAVA开发中的一种常见需求。通过使用SnakeYAML库,可以轻松地将YAML文档...
若图像文件被打包在JAR中,可以使用`getResourceAsStream()`方法读取: ```java InputStream inObject = getClass().getResourceAsStream("image.gif"); byte[] buffer = new byte[inObject.available()]; for (int...
此外,如果你需要频繁地从JAR中读取资源,可以考虑使用`Class.getResourceAsStream()`或`ClassLoader.getResourceAsStream()`方法,它们允许你通过类路径(相对于类或类加载器)访问资源,而无需显式打开`JarFile`。...
- **使用 `getResource` 和 `getResourceAsStream` 方法** - 示例: - `getClass().getResourceAsStream(filePath);` (`filePath` 例如为 "/filename",默认从 WEB-INF/classes 开始查找,适用于 Tomcat 等容器...
5. **使用 `class.getClassLoader()` 所得到的 `java.lang.ClassLoader` 的 `getResourceAsStream()` 方法** 这种方法与第4种类似,只是通过类加载器获取资源输入流。示例: ```java InputStream in = ...
- 注意点:使用`getResourceAsStream()`方法时,路径必须以`/`开头,这表示从类路径的根目录开始查找。 #### 绝对路径的应用场景 1. **基于bin目录下的文件访问**: - 假设项目的编译输出目录为`bin`,且文件...
Java Properties 类是Java标准库中...总之,Java Properties类是Java开发中处理配置文件的利器,通过它的方法可以方便地读取、修改和保存配置信息,尤其在处理包含中文字符的配置时,注意编码问题,确保数据的正确性。