このコードを使用して zip アーカイブからファイルを抽出しています (すべての catch ステートメントとその他の初期化ステートメントを省略しています)。
zipInputStream = new ZipInputStream(new FileInputStream(file));
zipFile = new ZipFile(file);
for (Enumeration<?> em = zipFile.entries(); em.hasMoreElements();) {
String extractedFileName = em.nextElement().toString();
ZipEntry outerZipEntry = zipInputStream.getNextEntry();
if (outerZipEntry.getName().contains(searchString)) {
extractedFile = new File(outputDir + outerZipEntry.getName());
out = new FileOutputStream(outputDir + extractedFileName);
byte[] buf = new byte[1024];
int len;
while ((len = zipInputStream.read(buf)) > 0) {
out.write(buf, 0, len);
}
break;
}
}
このコードは、たとえば /archive.zip/file_i_need.txt でファイルを抽出するときに正常に機能します。
しかし、/archive.zip/folder1/file_i_need.txt からファイルを抽出しようとすると、readLine() を使用してファイルを読み取ろうとすると、例外 java.lang.NullPointerException が発生します。
String line = null ;
BufferedReader input = new BufferedReader(newFileReader(extractedFile)) ;
while( (line = input.readLine() ) != null ) {
...
}
両方のケースでテストしましたが、ファイルがフォルダー内にある場合、このコードは機能しないようです。
お勧めできる提案はありますか?
ありがとう!