У меня есть 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()
вне цикла for
в этом методе, он возвращает null
.
Вот простой модульный тест для этого метода, который в настоящее время не выполняется в последний 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
. Однако я не хотел смешивать этот метод извлечения почтовых индексов с методом, который получает содержимое и анализирует его. Кроме того, я не хочу сохранять извлеченные файлы на диск и открывать их позже.
Итак, как я могу заполнить эти Map
BufferedReader
с, которые не будут возвращать ноль при readLine
вызовах?