转自:
http://dev.firnow.com/course/3_program/java/javajs/20090208/154974.html
这两个方法还是略有区别的, 以前一直不加以区分,直到今天发现要写这样的代码的时候运行错误, 才把这个问题澄清了一下。
基本上,两个都可以用于从 classpath 里面进行资源读取, classpath包含classpath中的路径和classpath中的jar。
两个方法的区别是资源的定义不同, 一个主要用于相对与一个object取资源,而另一个用于取相对于classpath的资源,用的是绝对路径。
在使用Class.getResourceAsStream 时, 资源路径有两种方式, 一种以 / 开头,则这样的路径是指定绝对路径, 如果不以 / 开头, 则路径是相对与这个class所在的包的。
在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径。
举例,下面的三个语句,实际结果是一样的:
com.explorers.Test.class.getResourceAsStream("abc.jpg")
= com.explorers.Test.class.getResourceAsStream("/com/explorers/abc.jpg")
= ClassLoader.getResourceAsStream("com/explorers/abc.jpg")
分享到:
相关推荐
在Java编程中,`getClass().getResourceAsStream()`是一个非常实用的方法,用于从类路径(Classpath)中加载资源,如配置文件、图片、字体等。这个方法返回一个`InputStream`对象,可以通过它读取到资源文件的内容。...
在 Java 中,有两种方式可以获取文件路径,即使用 Class.getResourceAsStream() 和 ClassLoader.getResourceAsStream()。 Class.getResourceAsStream() Class.getResourceAsStream() 方法返回的是一个 InputStream...
- 当使用`ClassLoader.getResource`或`ClassLoader.getResourceAsStream`时,路径必须以 `/` 开头,否则可能无法找到资源。 - `getClassLoader().getResource("/")`会返回`classpath`的根目录,但`getClassLoader()....
2. 使用`ClassLoader.getResource()`和`ClassLoader.getResourceAsStream()` - 类加载器(`ClassLoader`)也可以用来获取资源,这对于不是从特定类而是从全局类路径中获取资源很有用。例如: ```java ClassLoader...
String content = IOUtils.toString(YourClass.class.getResourceAsStream("/resource.txt"), StandardCharsets.UTF_8); ``` 5. **Spring Framework**:在Spring框架中,可以使用`Resource`接口来操作资源,例如...
InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name); Properties p = new Properties(); p.load(in); ``` ### 6. 使用`java.lang.ClassLoader.getSystemResourceAsStream()` 这是一...
- **`ClassLoader`和`Class.getResourceAsStream()`**:适用于类路径下的资源文件。 - **`URL`**:适用于网络资源文件。 - **`Files.newBufferedReader()`**:适用于Java 7及以上版本,代码更简洁。 - **`...
5. **使用 `class.getClassLoader()` 所得到的 `java.lang.ClassLoader` 的 `getResourceAsStream()` 方法** 这种方法与第4种类似,只是通过类加载器获取资源输入流。示例: ```java InputStream in = ...
4. **使用`defineClass`方法定义类**:当输入流不为空时,使用`ClassLoader`的`defineClass`方法将字节数组转换为`Class`对象。 5. **实例化类**:通过`myLoader.loadClass(...
InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name); Properties p = new Properties(); p.load(in); ``` 这个方法可以处理任何由类加载器加载的资源。 6. **使用java.lang....
这种方法类似于`Class.getResourceAsStream()`,不同之处在于它通过类加载器来查找资源,这使得它在某些情况下更加灵活。 ```java import java.io.InputStream; import java.util.Properties; public class ...
try (InputStream in = ClassLoaderResourceExample.class.getClassLoader().getResourceAsStream(fileName)) { props.load(in); System.out.println("Read properties from class loader: " + props); } catch ...
InputStream input = YourClass.class.getResourceAsStream("/config.properties"); Properties prop = new Properties(); prop.load(input); ``` 3. 使用`java.nio.file`包 Java 7引入了NIO.2 API,我们可以使用`...
首先,最常用的读取properties文件的方法是利用`java.lang.Class`类的`getResourceAsStream(String name)`方法。例如: ```java InputStream in = getClass().getResourceAsStream("资源Name"); ``` 这种方法的...
InputStream in = JProperties.class.getClassLoader().getResourceAsStream("filename.properties"); Properties p = new Properties(); p.load(in); ``` 6. **使用 `ClassLoader` 类的 `...
InputStream is = MyClass.class.getResourceAsStream("/config.properties"); try { prop.load(is); } finally { is.close(); } ``` 这里`MyClass`代表当前类,也可以替换为其他类,资源文件路径通常以斜杠...
使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法也可以读取Properties文件。下面是一个示例代码: ```java InputStream in = JProperties.class.getClassLoader()....
你可以通过`Thread.currentThread().getContextClassLoader()`或`Class.getResourceAsStream()`来获取`ClassLoader`实例,然后使用`getResourceAsStream()`方法加载资源文件。例如: ```java InputStream in = ...
ClassLoader loader = ConnectionPool.class.getClassLoader(); String packageName = ConnectionPool.class.getPackage().getName().replace('.', '/'); String path = packageName + "/database.properties"; ...
当需要在运行时动态加载资源时,还可以使用`ClassLoader.getResource()`或`ClassLoader.getResourceAsStream()`,这样可以利用当前线程的上下文类加载器,适应更复杂的类加载环境。 在打包过程中,确保资源被正确...