关于class.getResourceAsStream(String name)与
class.getClassLoader().getResourceAsStream(String name)的路径name问题
首先用类加载资源文件的方式可以有以下三种:
(包结构图)
1) InputStream inStream = DaoFactory.class.getResourceAsStream("dao.properties");
2) inStream=DaoFactory.class.getResourceAsStream("/com/jdbc/dao/dao.properties")
3) inStream=DaoFactory.class.getClassLoader().getResourceAsStream("com/jdbc/dao/dao.properties");
第一种和第二种方式是采用Class对象去加载,第三种采用ClassLoader对象去加载资源文件,之所以Class对象也可以加载资源文件是因为Class类封装的ClassLoader的getResourceAsStream方法。从Class类中的源码中可以看出:

之所以这样做无疑还是方便客户端的调用,省的每次获取ClassLoader才能加载资源文件的麻烦。
路径问题:
1. 第三种是最本质的做法,前两种也是基于第三种去实现的。JVM会使用Bootstrap Loader去加载资源文件。所以路径还是这种相对于工程的根目录即"com/jdbc/dao/dao.properties"(不需要“/”)。
2. 第一种是采用的相对路径,资源文件相对于当前这个类即(DaoFactory类)的位置,这种方式Class对象做了一些处理。即resloveName(name)这个方法。最终name还是会转换成适合第三方式的name参数
3. 第二种是采用绝对路径,绝对路径是相对于classpath根目录的路径(工程里src目录对应bin目录(存放.class文件的目录))。

(Class类中resolveName方法)

- 大小: 29 KB

- 大小: 22.9 KB

- 大小: 10.4 KB
分享到:
相关推荐
String name = "config.properties"; InputStream in = new BufferedInputStream(new FileInputStream(name)); Properties p = new Properties(); p.load(in); ``` 此方法适用于处理本地文件系统中的...
例如,`ClassLoader`类的`getResource(String name)`和`getResourceAsStream(String name)`方法,以及`ResourceBundle`类的`getBundle(String path)`都是基于此类路径查找资源。 然而,尽管相对路径在使用上更为...
InputStream in = ClassLoaderResourceStream.class.getClassLoader().getResourceAsStream(name); Properties p = new Properties(); p.load(in); // 关闭流 in.close(); // 获取属性值 System.out....
`PropertiesReader.class.getResourceAsStream("/config.properties")`用于从类路径加载资源,注意路径名以斜杠开头,表示从根目录开始查找。 方法二:使用`java.nio.file`包 1. 如果`properties`文件位于项目文件...
2. **加载资源**:`getResourceAsStream(String resourcePath)`,获取指定路径的资源流,常用于读取配置文件。 3. **定位类路径**:`addClassPath(String path)`,添加新的路径到类路径,使得JVM能够找到该路径下的...
InputStream in = ReadProperties.class.getClassLoader().getResourceAsStream(name); Properties p = new Properties(); p.load(in); // 示例:获取某个键的值 String value = p.getProperty("key"); ...
- 使用`Class.getResourceAsStream(String name)`:通过类路径读取资源文件。 - 使用`ClassLoader.getResourceAsStream(String name)`:通过类加载器读取资源文件。 在处理包含中文字符的配置文件时,可能会遇到...
InputStream in = ClassLoaderResourceExample.class.getClassLoader().getResourceAsStream(name); Properties p = new Properties(); p.load(in); // 示例:获取配置文件中的属性 String dbUrl = p....
9. getResourceAsStream(String path):返回指定路径资源的输入流。 10. getRequestDispatcher(String path):返回一个RequestDispatcher对象,用于请求转发和包含。 11. getServerInfo():返回服务器的信息字符串。...
2. `public InputStream getResourceAsStream(String name)`:这个方法返回一个`InputStream`,通过它可以读取类路径中指定资源的数据。`name`参数同样是以类路径根为基准的路径。 然而,在实际开发中,通常我们会...
- `getResourceAsStream(String path)`: 返回指定资源的输入流。 - `getRequestDispatcher(String uripath)`: 返回指定资源的`RequestDispatcher`对象。 - `getServlet(String name)`: 返回指定名称的Servlet。 ...
String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1); Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); m....
7. **getResourceAsStream(String path)**:返回指定资源的输入流。 #### 四、ServletContext示例代码 假设我们有一个简单的Servlet应用,我们需要将一些初始化参数存储到`ServletContext`中,并在多个Servlet之间...
`getResource(String path)`方法根据给定的路径返回一个`java.net.URL`对象,该路径通常以“/”开头,表示相对于当前Web应用根目录的位置。通过`getResourceAsStream(String path)`方法,可以直接读取资源的内容作为...
InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name); Properties p = new Properties(); p.load(in); ``` 6. **使用 `java.lang.ClassLoader` 类的 `getSystemResourceAsStream()...
String poolName = name.substring(0, name.lastIndexOf(".")); String url = props.getProperty(poolName + ".url"); if (url == null) { log("没有为连接池" + poolName + "指定URL"); continue; } String ...
String rootPath = servletContext.getRealPath("/")`:前者获取的是运行环境的工作目录,后者则是在Servlet中获取Web应用的根路径。 了解这些方法后,开发人员可以更有效地进行文件读写、资源加载和目录遍历等...
- **`getResourceAsStream(String path)`**:返回一个用于读取指定文件的输入流。 - **`getMimeType(String file)`**:返回给定文件的MIME类型。 ##### 5. 输出日志 - **`log(String msg)`**:向Servlet的日志文件...
例如,我们可以获取`ConnectionPool`类的类加载器,然后根据类的包路径定位到`database.properties`,并通过`getResourceAsStream()`方法读取文件内容。伪代码如下: ```java ClassLoader loader = ConnectionPool....