java maven项目testng执行时使用的是test-classes下的文件,共享main下方resource的配置
在pom.xml中配置
<!-- 共享main下面的resources文件--><testResources><testResource><directory>${project.basedir}/src/test/resources/testData</directory></testResource><testResource><directory>${project.basedir}/src/main/resources/testData</directory></testResource></testResources>
// 服务端读取(非静态)InputStream in = this.getClass().getResourceAsStream("/properties/test.properties");Properties properties = new Properties();properties.load(in);properties.getProperty("name");// 服务端读取(静态)InputStream stream = Workbook.class.getResourceAsStream("/"+path);
在执行测试时,注意其classpath是test-classes,需要在文件共享完成配置后才能访问到resources的文件,以target目录的结构为准
// 以下两个返回路径不一样的,使用路径时需要注意String filepath = Workbook.class.getClassLoader().getResource("").getPath()// ClassLoader:/E:/coding/IFauto/target/test-classes/String filepath = Workbook.class.getResource("").getPath()//class:file:/C:/Users/user/.m2/repository/org/apache/poi/poi-ooxml/3.15/poi-ooxml-3.15.jar!/org/apache/poi/ss/usermodel/
class.getClassLoader().getResourceAsStream() 和 class.getResouceAsStream() 的区别
class.getClassLoader().getResourceAsStream(String name) 默认从classpath中找文件(文件放在resources目录下),name开头不能带”/“,否则会抛空指针。采用相对路径, “/“就相当于当前进程的根目录,即项目根目录;
inStream = PropertiesTest.class.getClassLoader().getResourceAsStream("com/test/demo/test.properties");
class.getResourceAsStream(String name) 是采用绝对路径,绝对路径是相对于 classpath 根目录的路径,”/“ 就代表着 classpath,所以 name 属性需要前面加上 “/“;
inStream = PropertiesTest.class.getResourceAsStream("/com/test/demo/test.properties")
