2017-05-05 93 views
0

之前,我解釋我的問題 - 我試圖找到解決方案,已經提出的問題,但他們沒有工作;)資源文件

我想讀取裏面的jar文件,這是另一個項目的依賴關係。該文件位於路徑下

/src/main/resources/driver 

項目打包成jar文件。從資源驅動程序包含進JAR採用POM:

<resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <includes> 
       <include>*</include> 
      </includes> 
     </resource> 
    </resources> 

此外,當我解開罐子,我可以看到它添加到JAR的根目錄。

我需要做的,是從罐子內複製該文件到一個目錄的磁盤上。它一切正常,只要通過IntelliJ將項目添加爲依賴項目即可。當我將它作爲POM中的依賴項添加時,我得到一個NullPointerException。

,我使用加載該文件看起來像這樣的代碼:調用的getPath時NullPointerException異常:

String sourceFilePath = this.getClass().getClassLoader().getResource(driverFileName).getPath(); 

我也嘗試過不同的方法:

String sourceFilePath = this.getClass().getResource("driver").getPath(); 
    String sourceFilePath = this.getClass().getResource("/driver").getPath(); 
    String sourceFilePath = this.getClass().getClassLoader().getResource("driver").getPath(); 
    String sourceFilePath = this.getClass().getClassLoader().getResource("/driver").getPath(); 

但每次嘗試用相同的結果結束()。

我需要的是解決方案,因爲附加爲依賴的項目是UI測試框架。到目前爲止,我正在爲每個需要它們的新項目添加驅動程序,但這需要時間,對於希望使用此框架的人員來說更復雜,並且在發佈新版驅動程序時會造成很大的麻煩。我希望能夠簡單地爲這個框架添加一個Maven依賴,並且能夠使用這個框架內部的驅動。 這裏的問題是我需要設置一個帶有該驅動程序路徑的系統變量。所以一旦需要驅動程序,我試圖將它(代碼是在框架內)複製到外部位置(某些tmp目錄)。

任何想法如何解決呢?

+0

不要使用'this.getClass()的getResource(。 ...',你需要使用一個類從其他jar('ClassInOtherJar.class.getResource(') –

+0

好吧,我改變了這一切,但這段代碼使用的是依賴罐內。確實仍然重要嗎? –

+0

*「,但是這段代碼用在那個相關的jar裏面」*這就是它爲我工作的方式...... –

回答

1

如果你想從一個JAR文件中讀取文件,也許下一行工作得更好:

InputStream in = this.getClass().getResourceAsStream("/driver/filename.txt"); 

這之後,您將需要轉換的InputStream在爲String。我使用Apache的百科全書IOUtils:

String theString = IOUtils.toString(inputStream, encoding); 

我希望它可以幫助...

0

使用覘罐子的類加載器這樣

ClassInOtherJar.class.getClassLoader().getResourceAsStream("filename.xml")