一般我们在编写完Java程序中获取资源路径,在开发和调试期(未打包前),是没有问题的,但在打包后,由于资源(图片、配置文件等)都将打包到jar文件中,由于System中的“user.dir”属性发生了变化,会造成用绝对路径的方式无法找到jar文件中的资源文件。因为程序载入图片或文本文件时,使用以当前工作路径为基准的方式来指定文件和路径,而资源文件打在jar包中后程序无法通过绝对路径找到。因此可采用Java本身以类为基准的路径搜索方式。如下两种方式:
取得相对于包的根路径
Java Code复制内容到剪贴板
- String path = new File(FrameConfig.class.getResource("/").getFile())
- .getAbsolutePath();
取得相对于包路径的流
Java Code复制内容到剪贴板
- Reader reader = new InputStreamReader(
- FrameConfig.class.getResourceAsStream("/res/uiConfig.xml"));
含有这种代码的程序在运行时,以类(类路径)为基准,而不依赖当前路径(System中的user.dir),
【注】:上面的路径“/res/uiConfig.xml”是相对于包的路径,如果写成“res/uiConfig.xml”,表示相对于类的路径:package/res/uiConfig.xml,这需要将图片和文本等文件的保存路径,和程序中指定的路径两者保持一致。
读取jar包中根Element(dom4j)
Java Code复制内容到剪贴板
- private static Element getRootElement(String path) {
- Element rootElement = null;
- Reader reader = null;
- try {
- reader = new InputStreamReader(
- FrameConfig.class.getResourceAsStream(path));
- rootElement = new SAXReader().read(reader).getRootElement();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- closeStream(reader);
- }
- return rootElement;
- }
- private static void closeStream(Closeable stream) {
- if (stream != null)
- try {
- stream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- Element uiConfig = getRootElement("/res/uiConfig.xml");
- }
读取jar包中根Element(jdom)
Java Code复制内容到剪贴板
- private static Element getRootElement(String path) {
- Element rootElement = null;
- Reader reader = null;
- try {
- reader = new InputStreamReader(
- FrameConfig.class.getResourceAsStream(path));
- rootElement = new SAXBuilder().build(reader).getRootElement();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- closeStream(reader);
- }
- return rootElement;
- }
读取jar包中国际化资源文件
Java Code复制内容到剪贴板
- ResourceBundle resources = ResourceBundle.getBundle(
- "res.i18n", Locale.getDefault());
- // 取得对应的值
- String value = resources.getString(key);
读取jar包中的图片资源
Java Code复制内容到剪贴板
- public static Image getImage(String imageName) {
- InputStream inputStream = null;
- ByteArrayOutputStream outputStream = null;
- try {
- inputStream = FrameConfig.class.getResourceAsStream("/res/images/"
- + imageName);
- outputStream = new ByteArrayOutputStream();
- byte buffer[] = new byte[1024];
- int len = 0;
- while ((len = inputStream.read(buffer)) != -1)
- outputStream.write(buffer, 0, len);
- return Toolkit.getDefaultToolkit().createImage(
- outputStream.toByteArray());
- } catch (Throwable th) {
- th.printStackTrace();
- } finally {
- closeStream(inputStream);
- closeStream(outputStream);
- }
- return null;
- }
- public static void main(String[] args) {
- Image image = getImage("add.gif");
- }
本文出自思考者日记网,转载请保留此出处!
相关推荐
本篇文章将详细讲解如何在Java中实现从JAR包中读取指定文件的方法。 首先,Java提供了`java.util.jar`包,其中包含处理JAR文件所需的类。`JarFile`类是核心类,它允许我们打开并操作JAR文件。在给定的代码示例中,`...
Java读取Jar中资源文件是一种常见的操作,在开发Java项目时,经常需要读取jar包中的资源文件。下面将详细介绍Java读取Jar中资源文件的实现代码和应用。 一、Java读取Jar中资源文件的必要性 在Java项目中,经常需要...
总结起来,Spring提供了多种方式读取JAR内配置文件,包括`@PropertySource`、`@ConfigurationProperties`以及直接使用`Resource`接口。理解这些方法的使用和它们之间的差异对于开发和维护复杂的Spring应用至关重要。...
标题“删除jar包中的指定文件”涉及到的是Java开发中对已打包JAR文件进行操作的知识点。在Java中,JAR(Java Archive)文件是一种归档格式,用于将多个类文件和其他资源组合到一个单一的文件中,方便分发和执行。...
标题“EXCELJAVA读取JAR包”涉及的是Java编程中的一个特定应用场景,即使用Java来读取Excel文件,而这个过程可能涉及到从一个JAR文件中操作数据。描述中提到,开发者创建了一个Java项目,引入了Apache POI库(通过...
总之,解决SpringBoot jar包中的文件读取问题的关键在于,不要试图将jar内的资源视为文件系统中的文件,而应使用输入流和类加载器来访问这些资源。这样,即使在jar环境下,也能正确地读取和使用资源文件,确保应用的...
java读JAR包里的配置文件、java读JAR包里的配置文件
1. **Java ClassLoader**: 读取JAR或WAR包内的文件通常需要借助Java的ClassLoader。ClassLoader是Java中负责加载类的组件,它知道如何从不同的源(如文件系统、网络或ZIP文件)加载类和资源。 2. **getResource() ...
在Java编程中,有时我们需要在运行时从JAR(Java Archive)包中读取文件,例如类、配置或资源文件。这个任务对于那些希望在不将文件解压到硬盘上的情况下使用它们的开发者来说是非常重要的。本文将详细介绍如何在...
在Spring MVC项目中,加载jar包中的Spring配置文件是一个常见的需求,特别是在进行SSM(Spring、Spring MVC、MyBatis)整合时。SSM框架的整合通常涉及到多个配置文件的组织和管理,其中一部分配置可能会被打包到独立...
在Java编程中,读取jar包内的文件是一个常见的需求,特别是在运行时动态加载资源或类文件时。Java提供了一种内置的方式,通过`java.util.jar`包中的`JarFile`和`JarInputStream`类来实现这个功能。下面将详细介绍...
在Java编程中,有时我们需要在运行时访问JAR文件内部的资源,如图片、文本文件等。...总之,读取JAR内的资源是Java应用程序中常见的任务,通过`java.util.jar`包提供的工具,我们可以方便地访问并处理这些资源。
java读取tar.gz压缩文件的jar包
本篇文章将详细探讨如何在Java中正确地从JAR包中加载资源文件,并提供相应的源码示例。 首先,理解Java类路径(classpath)是关键。类路径是指Java虚拟机(JVM)查找.class文件和其他资源文件的路径。当你运行一个...
2. **读取JAR内的资源文件**: - `JarInputStream`:如果你知道要读取的文件名,可以通过`java.util.zip.JarInputStream`类来实现。这个类允许你逐个读取JAR文件中的条目,而无需一次性加载所有内容到内存。 3. **...
在Java编程环境中,`jar`(Java Archive)文件是一种打包工具,它将多个类文件、资源文件以及其他元数据集合在一起,便于分发和执行。本文将深入探讨`jar`包中类的加载机制以及如何在Java程序中使用`jar`中的资源。 ...
在Java编程中,处理Excel文件是一项常见的任务,无论是读取数据、写入数据还是进行复杂的分析操作。在Java中,我们可以使用第三方库来简化这项工作。本篇文章将详细讲解如何使用给定的jar包——opencsv-2.3.jar、poi...
提供的jar包中包含了源码,这意味着我们可以学习和理解实现文件分割和合并的具体算法和逻辑。通过阅读源码,开发者可以了解到如何控制文件的读写操作,如何管理多个文件的顺序,以及如何处理可能出现的错误和异常。...
Java 读取 Excel 文件是许多开发任务中的常见需求,Apache POI 是一个广泛使用的开源库,专门用于处理 Microsoft Office 格式的文件,包括 Excel。在本案例中,提供的压缩包 "poi.zip" 包含了两个子文件:poi-bin-...
### Java加载.jar包详解 #### 一、Java 类加载机制概览 自 JDK 1.2 版本之后,Java 类加载机制发生了一个重要的变化,引入了一种名为**类加载委托**的概念。这一机制的核心思想在于,如果某个 `ClassLoader` 无法...