2014-09-04 48 views
3

我只是需要從jar文件它們在運行時資源目錄中的文件獲取資源文件...如何從可運行jar文件這是在構建路徑

我知道某些方面就像... 但它只能讀取圖片

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

在這裏,我可以讀取被添加到構建路徑在Eclipse中JAR內從目錄中的圖像,但在這裏,我面臨着一些問題,同時獲得一些「所以」文件和一些「 cascade_hand.xml「文件從資源/級聯/ ...,我需要它們在運行時可從可運行.JAR文件。

我試過這個too..but這並不工程..

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

不幸的是,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()); 
+0

是親愛的@llogiq我知道它的工作原理,但我不能訪問我的原始文件已在** JAR **中可用?因爲這裏我需要在JAR文件中工作..... – Gopal00005 2014-09-04 12:49:39

+0

是否要更新JAR?這可能會使用'Class.getResource(...)'和1.7以來的JarFileSystem,但它會非常黑客。 從OpenCV的jar中加載不是直接可能的。根據您運行的操作系統,可能會有選項(例如在Linux和其他unices下,您可以想象通過zipfs掛載jar),但是沒有可移植的解決方案。 – llogiq 2014-09-04 16:05:57

+0

+1最後我必須做這件事....感謝您的支持@llogiq :)您也可以投票並設置爲最喜歡的問題。 – Gopal00005 2014-09-26 06:51:17

0

你可以使用一個類加載器讀取文件

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

希望它能幫助。

+1

都能跟得上我不希望任何的InputStream我需要從jar文件訪問該文件,因爲OpenCV的讀取文件的本地代碼.... – Gopal00005 2014-09-04 12:44:09

+0

如果OpenCV的不支持通過類加載器讀取,你可以使用一個InputStream來通過類加載器讀取並將臨時文件寫入文件系統,然後使用OpenCV讀取該臨時文件。 – mschenk74 2014-09-04 14:04:10

+0

Nope bro我無法使用InputStream,因爲OpenCV需要文件的絕對路徑。是的,我可以使用臨時文件機制,但我不知道它 – Gopal00005 2014-09-04 15:03:16

相關問題