我正在使用此代码从 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 ) {
...
}
我在这两种情况下都对其进行了测试,当文件位于文件夹中时,此代码似乎不起作用,因为提取的文件名是 'folder/file_i_need.txt' 而只是 'file_i_need.txt'。
你有什么建议可以推荐吗?
谢谢!