我有一个 zip 文件,其中包含我想要阅读的 9 个文件。所以我实现了以下功能:
public static Map<String, BufferedReader> unzipFile(InputStream zippedFile) throws IOException {
ZipInputStream zipInputStream = new ZipInputStream(zippedFile);
HashMap<String, BufferedReader> result = new HashMap<>(9);
for (ZipEntry zipEntry = zipInputStream.getNextEntry(); zipEntry != null; zipEntry = zipInputStream.getNextEntry()) {
if (zipEntry.isDirectory()) {
continue;
}
result.put(zipEntry.getName(), new BufferedReader(new InputStreamReader(zipInputStream)));
}
return result;
}
同一类中的其他签名(调用相同的方法):
public static Map<String, BufferedReader> unzipFile(String zippedFile) throws IOException {
return unzipFile(new File(zippedFile));
}
public static Map<String, BufferedReader> unzipFile(File zippedFile) throws IOException {
return unzipFile(new FileInputStream(zippedFile));
}
我的想法是Map从该方法中获取返回的值,并能够在我的代码的其他地方读取它。问题是每次我在此方法的循环result.get("filename").readLine()外调用时,它都会返回.fornull
这是此方法的简单单元测试 - 目前在最后一个失败Assert.assertNotNull:
@Test
public void unzipFileTest() throws Exception {
Map<String, BufferedReader> result = FileHandlerUtility.unzipFile(TestUtil.FILE_SAMPLE_NAME);
Assert.assertNotNull(result);
Assert.assertEquals(result.size(), 9);
Assert.assertNotNull(result.get("Car.txt"));
Assert.assertNotNull(result.get("Client.txt"));
Assert.assertNotNull(result.get("Client.txt").readLine());
}
我想可能与创建的变量的范围有关,因为在调试时,我注意到我可以在for循环中获取文件的内容。但是,我不想将这种 zip 提取方法与获取内容并解析它的方法混合使用。此外,我不想将提取的文件保存到光盘并稍后重新打开它们。
那么,我怎样才能用不会在调用时返回 null 的 s 来填充Map它BufferedReader呢readLine?
慕码人2483693
浮云间
随时随地看视频慕课网APP
相关分类