2017-05-05 95 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")