java - 如何从构建路径中的可运行jar文件中获取资源文件

标签 java eclipse jar resources

我只需要在运行时位于资源目​​录中的 jar 文件中的文件...

我知道一些方法就像...但它只能读取图像

ImageIO.read(Login.class.getResource("res/images/icon.png"));

在这里,我可以从 JAR 中的目录中读取图像,该目录被添加到 eclipse 中的构建路径中,但是我在从 resources/cascades/获取一些“.so”文件和一些“cascade_hand.xml”文件时遇到了一些问题... , 我需要它们在运行时从可运行的 .JAR 文件中可用。

我也试过这个..但是这不起作用..

CascadeClassifier cascade = new CascadeClassifier(
            "resources/cascades/haarcascade_mcs_leftear.xml");

这也行不通...

CascadeClassifier cascade = new CascadeClassifier(this.getClass().getResourceAsStream("resources/cascades/haarcascade_mcs_leftear.xml");

我知道有办法将该文件复制到某个临时目录并使用它们,但我真的不知道该怎么做?

InputStream is = this.getClass().getResourceAsStream("resources/cascades/haarcascade_mcs_leftear.xml");

有没有其他方法可以从 Runnable JAR 访问该类型的文件?

我在用 eclipse 创建的 jar 文件中也遇到了一些问题。

Eclipse 创建 Runnable jar 文件并在构建路径中的 jar 文件中创建资源目录的目录,但实际上所有这些都创建为 jar 文件中的一个父目录。

我在 eclipse 中的文件夹层次结构如下图所示。

enter image description here

最佳答案

不幸的是,OpenCV 以 native 代码读取文件,因此唯一的方法是先将数据复制到临时文件。

String tempDir="tmp"; //TODO: use a sensible default
Path tmp = Files.createTempFile(tempDir, "cv");
Files.copy(Login.class.getResourceAsStream(
    "resources/cascades/haarcascade_mcs_leftear.xml"), tmp);
CascadeClassifier cascade = new CascadeClassifier(tmp.toString());

关于java - 如何从构建路径中的可运行jar文件中获取资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25663364/

相关文章:

java - 使用Spring Boot读取类路径资源中目录的子目录

java - 如何删除字符串(句子)中的空格

Eclipse Luna 深色主题,代码编辑器白色

eclipse - 无法将选定的文本解析为已定义的函数或成员

java - 使用相同的资源位置执行和构建 maven2 java jar 项目

groovy - Gradle 构建不包括 source/src groovy

java - 错误消息 "com.mysql.cj.exceptions.WrongArgumentException: The database URL cannot be null."是什么意思?

java - 我们如何将 TensorFlow 2.x 模型导入到 Java 中?

java - 如何响应 Actor 调用的结果?

eclipse - 在 Eclipse 中以编程方式调整 View 大小