如何从buildpath中的runnable jar文件中获取资源文件

时间:2014-09-04 10:40:53

标签: java eclipse jar resources

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

我知道某些方式就像... 但它只能读取图像

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

在这里,我可以从JAR中的目录中读取图像,该目录被添加到eclipse中的构建路径中,但是在这里我从资源/级联/获取一些“.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

2 个答案:

答案 0 :(得分:2)

不幸的是,OpenCV使用本机代码读取文件,因此唯一的方法是首先将数据复制到临时文件中。

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());

答案 1 :(得分:0)

您可以使用类加载器来读取文件

InputStream inn = ClassLoader
            .getSystemResourceAsStream("resources/cascades/haarcascade_mcs_leftear.xml");

希望它有所帮助。