Java中Jar包内文件的读取
作者:网络转载 发布时间:[ 2013/2/1 9:59:12 ] 推荐标签:
利用ClassLoader读取Jar包内部文件
/**
* 从依赖的Jar包中读取文件, Jar包内的文件是无法用File读取的,只能用Stream的方式读取。
*
* @author lihzh
* @throws URISyntaxException
* @throws IOException
* @data 2012-4-11 下午11:07:58
*/
@Test
public void testGetFileFromJarInClassPath() throws URISyntaxException,
IOException {
Enumeration<URL> urls = this.getClass().getClassLoader().getResources("conf/test.properties");
URL url = this.getClass().getClassLoader().getResource("conf/test.properties");
Assert.assertTrue(urls.hasMoreElements());
Assert.assertNotNull(url);
// 注意两种不同调用方式的路径的区别,此处如果不以“/” 开头,会被当作相对于当前类所在的包类处理,自然无法找到。
// 因为在Class的getResource方法的开头,有一个resolveName方法,处理了传入的路径格式问题。而ClassLoader类里的
// getResource和getResources均无此处理。使用时候需要用心。
URL clzURL = this.getClass().getResource("/conf/test.properties");
URL nullURL = this.getClass().getResource("conf/test.properties");
Assert.assertNotNull(clzURL);
Assert.assertNull(nullURL);
URL thisClzURL = this.getClass().getResource("");
Assert.assertNotNull(thisClzURL);
// 开始读取文件内容
InputStream is = this.getClass().getResourceAsStream("/conf/test.properties");
Properties props = new Properties();
props.load(is);
Assert.assertTrue(props.containsKey("test.key"));
Assert.assertEquals("thisIsValue", props.getProperty("test.key"));
}
读取Jar内某路径下的所有文件
/**
* 从ClassPath中的Jar包读取某文件夹下的所有文件
*
* @author lihzh
* @throws IOException
* @data 2012-4-13 下午10:22:24
*/
@Test
public void testGetFilesFromJarInClassPathWithDirPath() throws IOException {
String dirPath = "conf/";
URL url = this.getClass().getClassLoader().getResource(dirPath);
Assert.assertNotNull(url);
String urlStr = url.toString();
// 找到!/ 截断之前的字符串
String jarPath = urlStr.substring(0, urlStr.indexOf("!/") + 2);
URL jarURL = new URL(jarPath);
JarURLConnection jarCon = (JarURLConnection) jarURL.openConnection();
JarFile jarFile = jarCon.getJarFile();
Enumeration<JarEntry> jarEntrys = jarFile.entries();
Assert.assertTrue(jarEntrys.hasMoreElements());
Properties props = new Properties();
while (jarEntrys.hasMoreElements()) {
JarEntry entry = jarEntrys.nextElement();
// 简单的判断路径,如果想做到想Spring,Ant-Style格式的路径匹配需要用到正则。
String name = entry.getName();
if (name.startsWith(dirPath) && !entry.isDirectory()) {
// 开始读取文件内容
InputStream is = this.getClass().getClassLoader().getResourceAsStream(name);
Assert.assertNotNull(is);
props.load(is);
}
}
Assert.assertTrue(props.containsKey("test.key"));
Assert.assertEquals("thisIsValue", props.getProperty("test.key"));
Assert.assertTrue(props.containsKey("test.key.two"));
Assert.assertEquals("thisIsAnotherValue", props.getProperty("test.key.two"));
}
对于不在ClassPath下的Jar包的读取,当作一个本地文件用JarFile读取即可。路径可使用路径。或者用上面的url.getConnection也可以处理。这里不再实现。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11