可以使用类的 ClassLoader 找到它,像在 JAR 文件中寻找 “资源” 那样,使用 ClassLoader getResourceAsStream() 方法,如清单 7 所示:
package com.tedneward.jars;
import java.util.*;
public class SpeakEnglish
implements ISpeak
{
Properties responses = new Properties();
// ...
public SpeakEnglish()
{
try
{
ClassLoader myCL = SpeakEnglish.class.getClassLoader();
responses.load(
myCL.getResourceAsStream(
"com/tedneward/jars/responses.properties"));
}
catch (Exception x)
{
x.printStackTrace();
}
}
// ...
}
您可以按照以上步骤寻找任何类型的资源:配置文件、审计文件、图形文件,等等。几乎任何文件类型都能被捆绑进 JAR 中,作为一个 InputStream 获取(通过 ClassLoader),并通过您喜欢的方式使用。
分享到:
相关推荐
例如,`JarFile.getEntry(String name)`可以获取指定名称的条目,然后`JarInputStream`可以从条目中读取字节流。 在实际应用中,我们还需要考虑安全性、线程安全和类的版本控制等问题。自定义ClassLoader可能会引发...
如果你的文件是在运行时类路径中,你可以使用`ClassLoader`来获取输入流,这样就不需要直接处理`JarFile`了。例如: ```java InputStream in = getClass().getResourceAsStream("/path/to/target_file_name"); ...
- 调用`JarFile`的`getEntry()`方法,传入资源的相对路径(例如,对于图片"img/test.jpg"和文本"txt/sample.txt",路径应分别为"img/test.jpg"和"txt/sample.txt")。 3. **读取资源**: - 对于文本文件,创建一...
当你运行一个包含资源文件的JAR包时,JVM会根据类路径来定位这些文件。默认情况下,JAR文件被视为一个类路径元素,其内部的结构被保留,这意味着你可以通过相对路径访问到资源。 1. 使用`ClassLoader`加载资源: ...
此外,如果你需要频繁地从JAR中读取资源,可以考虑使用`Class.getResourceAsStream()`或`ClassLoader.getResourceAsStream()`方法,它们允许你通过类路径(相对于类或类加载器)访问资源,而无需显式打开`JarFile`。...
List<JarFile> jarFiles = (List<JarFile>) jarFilesField.get(classLoader); for (JarFile jarFile : jarFiles) { jarFile.close(); } // 如果类加载器提供了close方法,也应该调用 if (classLoader ...
标题提到的“在jar包中查找指定的文件是否存在工具”是一个重要的实践场景,它涉及到Java的类加载机制和资源定位。下面将详细介绍这个知识点。 首先,Java的类加载器(ClassLoader)是负责加载类到Java虚拟机(JVM...
this.jarFile = jarFile; } @Override protected Class<?> findClass(String className) throws ClassNotFoundException { try (JarInputStream jis = new JarInputStream(new FileInputStream(jarFile))) { ...
`ClassLoader`提供了两个重要的方法用于资源定位: - `public URL getResource(String name)`:返回一个`URL`对象,表示名为`name`的资源。 - `public InputStream getResourceAsStream(String name)`:返回一个...
- 加载内容: `<Java_Runtime_Home>/lib`下的核心类库,如`rt.jar`等。 - 特点: 开发者无法直接获取到启动类加载器的引用,因此无法直接操作。 2. **标准扩展(Extension)类加载器**: - 实现方式: `sun.misc....
JarFile jarFile = new JarFile(jarPath); JarEntry entry = jarFile.getJarEntry(className.replace('.', '/') + ".class"); if (entry == null) { throw new FileNotFoundException("Class not found in JAR: ...
try (JarFile jar = new JarFile("path_to_your_jar.jar")) { JarEntry entry = jar.getEntry("TestMyPath"); if (entry != null) { try (InputStream is = jar.getInputStream(entry); BufferedReader reader ...
可以使用Java内置的`JarFile`类来实现这一功能,也可以借助第三方工具,例如`jdgui_0.3.6`,它是一个可视化的反编译工具,能够帮助开发者查看`jar`包内的类文件源代码。 3. **加载**:在Java程序中,`ClassLoader`...
3. **读取jar文件**:使用`java.util.jar.JarFile`类打开jar文件,并遍历其中的条目。每个条目对应于jar内的一个文件,如类文件、资源文件等。 4. **加载类**:对于每个类文件,使用自定义类加载器的`defineClass()...
在Java编程语言中,`URLClassLoader`是Java标准类加载器的一种实现,它负责从指定的URL(统一资源定位符)加载类和资源。本文将深入探讨`URLClassLoader`的工作原理,以及如何处理指定目录和JAR文件中的类加载问题。...
3. 查找类的字节码:调用`JarFile`的`getInputStream(JarEntry)`方法,其中`JarEntry`是代表类的条目,通常由`JarFile`的`getJarEntry(String className)`获得。 4. 将字节码转换为`Class`对象:使用`ClassLoader`的...
4.1 使用`jar`命令行工具:通过`jar cf jarfile manifest file1 file2 ...`命令,可以将指定的文件打包成`jar`。 4.2 IDE集成:大多数Java IDE(如Eclipse、IntelliJ IDEA)提供创建`jar`包的图形化界面,只需选择...
2. 导入JAR:在Java项目中,可以通过`<classpath>`元素在构建路径中添加JAR,或者使用`Class.forName()`和`ClassLoader`来动态加载JAR中的类。 开发过程中,理解并熟练使用JAR包是Java程序员的基本技能。正确地组织...
File jarFile = new File("path_to_your_jar.jar"); URL url = jarFile.toURI().toURL(); URL[] urls = new URL[]{url}; ClassLoader classLoader = new URLClassLoader(urls); ``` 3. **加载类**:使用加载的...
### 读取jar文件中的资源知识点 #### 一、引言 在开发过程中,经常会遇到需要从jar包中读取资源文件(如图片、音频等)的情况。这涉及到如何定位和访问这些文件的问题。本文将深入探讨如何在Java环境中有效地处理这...