从jar中读取资源文件

2024-04-30

我想从我的 jar 中读取资源,如下所示:

File file;
file = new File(getClass().getResource("/file.txt").toURI());
BufferedReader reader = new BufferedReader(new FileReader(file));

//Read the file

在 Eclipse 中运行它时工作正常,但是如果我将它导出到 jar,然后运行它,则会出现 IllegalArgumentException:

Exception in thread "Thread-2"
java.lang.IllegalArgumentException: URI is not hierarchical

我真的不知道为什么,但通过一些测试我发现如果我改变

file = new File(getClass().getResource("/file.txt").toURI());

to

file = new File(getClass().getResource("/folder/file.txt").toURI());

那么它的工作原理相反(它在 jar 中工作,但在 eclipse 中不起作用)。

我正在使用 Eclipse,并且包含我的文件的文件夹位于类文件夹中。


而不是试图将资源视为File http://docs.oracle.com/javase/7/docs/api/java/io/File.html只要问类加载器 http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html返回一个输入流 http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html对于资源,而不是通过获取资源作为流 http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream%28java.lang.String%29:

try (InputStream in = getClass().getResourceAsStream("/file.txt");
    BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
    // Use resource
}

只要file.txt资源在类路径上可用,那么无论资源是否存在,此方法都将以相同的方式工作file.txt资源位于classes/目录或内部jar.

The URI is not hierarchical发生这种情况是因为 jar 文件中资源的 URI 将如下所示:file:/example.jar!/file.txt。您无法读取 a 中的条目jar (a zip文件)就像是一个普通的旧文件File http://docs.oracle.com/javase/7/docs/api/java/io/File.html.

以下问题的答案很好地解释了这一点:

  • 如何从 Java jar 文件中读取资源文件? https://stackoverflow.com/questions/403256/how-do-i-read-a-resource-file-from-a-java-jar-file?rq=1
  • Java Jar 文件:使用资源错误:URI 不分层 https://stackoverflow.com/questions/10144210/java-jar-file-use-resource-errors-uri-is-not-hierarchical
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从jar中读取资源文件 的相关文章

随机推荐

  • 智能指针的三法则?

    我对将 三法则 与智能指针一起使用感到有点困惑 如果我有一个类 其唯一的数据成员是智能指针 我是否需要显式定义析构函数 复制构造函数和赋值运算符 我的理解是 由于智能指针将自动处理资源 所以我不需要显式定义析构函数 因此我不需要根据三规则为
  • 使用 .NET Core 操作图像

    我已将我的项目从 NET 4 5 更新到 NET Core 使用 ASP NET Core 我在以前的版本中有一些非常简单的代码 使用了位图对象System Drawing调整图像大小 我认为System Drawing不能在 NET Co
  • 你现在在做MDA(模型驱动架构)吗?如果是这样,您使用什么工具,效果如何?

    模型驱动架构是这样一种想法 您创建模型 以一种不依赖任何 或至少大多数 实现技术的方式表达您需要解决的问题 然后为一个或多个特定平台生成实现 人们声称 在更高的抽象级别上工作更加强大和高效 此外 您的模型比技术更长寿 因此 当您的第一语言
  • 将 Grails 应用程序移植到 GAE

    我目前正在评估一个 Grails 应用程序是否移植到 Google App Engine 我想了解以下方面的经验 Acegi 安全性 应用程序依赖此库来增强安全性 更新 刚刚了解到它基于 hibernate 因此无法移植 有推荐的替代品吗
  • 通话过程中是否可以拦截语音数据?

    我计划开发 Android 应用程序 对语音数据进行加密 解密 以便各方可以使用安全通道进行通信 那么问题来了 GSM通话时如何拦截语音 音频数据 可能还是不可能 我应该使用 Android NDK 还是其他东西 在 GSM 中 由于信道特
  • 是否可以在执行时查看对对象的所有引用?

    有没有办法查看执行时对某个对象的所有引用 我正在使用 Netbeans 其中是否存在此功能 编辑 使用探查器来执行此操作没有问题 我只需要知道引用 无论如何 好的 Netbeans 显示了对一个对象的所有引用 首先 以调试模式运行项目CTR
  • 如何从js获取zk元素id

    我正在使用 ZK 我想从 js 获取 zk 元素的 id 我使用了不同的方式 像原生 html 一样声明组件 它从 js 获取 id 但它不正确 我已经使用 ZK 的 html 标签声明了该元素 但也不正确 我已经看到了一些像 Compon
  • 可以跳过“不返回”吗?

    我想知道跳过是否是一种不好的方式return None 当不需要时 Example def foo1 x if some condition return Baz x else return None def foo2 x if some
  • 适用于 Visual Studio 2013 的水晶报表 8

    有什么办法可以在 Visual Studio 2013 上运行 Crystal Reports 8 我有一个使用 VS2008 Crystal Reports 8 构建的 Vb Net 项目 现在我正在运行 Visual Studio 20
  • 使用 AFNetworking 发送多张图像

    我正在开发一款消息应用程序 用户还可以互相发送图片 当用户发送多张图片时 我会并行发送它们 在发送第二张图片之前 我不会等待第一张图片完成上传 搬到之前AFNetworking我成功地做到了这一点ASIFormDataRequest 事实上
  • 如何在 Angular 2 中添加表单验证模式?

    我有一个简单的表单 需要验证输入的开头和结尾是否不是空格 在 HTML5 中 我将这样做
  • 如何根据最短距离为经纬度观测值指定名称

    我有两个数据框 df1包含带有经纬度坐标的观测值 df2具有带有纬度坐标的名称 我想创建一个新变量df1 name每个观察值的名称df2到该观测值的距离最短 一些示例数据df1 df1 lt structure list lat c 52
  • 解析对象或对象数组的 JSON 键

    在 Moshi 中 是否可以创建一个类型适配器来解析同一类型的对象或对象列表 例如 有时 JSON 是 person 其他时候是 person 理想情况下 我希望有一个如下所示的 Java 对象 class PersonContainer
  • PyFile_Type 替换为 ..?

    我正在尝试编译Yenc https bitbucket org dual75 yenc对于Python 3 2 我注意到 gcc 抱怨未声明的函数PyString Type 所以我用它的替代品替换了它PyBytes Type正如根据文档 h
  • 如何使用 Visual Studio + ReSharper 禁用不需要的自动完成?

    我正在使用 Visual Studio 2010 和 ReSharper 5 我在 cs 文件的顶部定义了它 if X86 using size t System Int32 else using size t System Int64 e
  • 如何使用 java 开始编码和设置 Web 服务器?

    所以现在我想我已经学习了java的所有基础知识和术语 但我不知道如何使用 Java 中的 Netbeans 编码和显示网页 大多数教程包含大量关于不同技术的讨论 Java 使用 Java Beans JSP 和 servlet 等 我在哪里
  • Laravel 中的魔法方法

    所以我最近意识到 而不是使用 users User all return view home gt with users users 你有能力做到 return view home gt withUsers users 我相信这些被称为 神
  • 在 iOS 13 中推送 UIViewController 会导致其与状态栏重叠

    请注意 该项目是在 Xcode 10 中创建的 我最近升级到 Xcode 11 发生了这种情况 我有一个 UINavigationController 来推动视图控制器 初始视图控制器看起来不错 但是当我通过推动另一个视图控制器来连接它时
  • @Aspect 方面的 Spring 自动装配 bean 为 null

    我有以下弹簧配置
  • 从jar中读取资源文件

    我想从我的 jar 中读取资源 如下所示 File file file new File getClass getResource file txt toURI BufferedReader reader new BufferedReade