我只需要运行时位于资源目录中的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中有文件夹层次结构就像下面的图像一样。
答案 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");
希望它有所帮助。