我有一个愚蠢的问题,我无法弄明白。谁能帮我? 我的代码如下:
String zipname = "C:/1100.zip";
String output = "C:/1100";
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
ZipFile zipFile = new ZipFile(zipname);
Enumeration<?> enumeration = zipFile.entries();
while (enumeration.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry) enumeration.nextElement();
System.out.println("Unzipping: " + zipEntry.getName());
bis = new BufferedInputStream(zipFile.getInputStream(zipEntry));
int size;
byte[] buffer = new byte[2048];
它不会创建文件夹,但调试会显示正在生成的所有内容。 为了创建一个文件夹,我使用了代码
if(!output.exists()){ output.mkdir();} // here i get an error saying filenotfoundexception
bos = new BufferedOutputStream(new FileOutputStream(new File(outPut)));
while ((size = bis.read(buffer)) != -1) {
bos.write(buffer, 0, size);
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
bos.flush();
bos.close();
bis.close();
}
我的zip文件包含图片:a.jpg b.jpg ...在同一层次结构中,我有abc.xml。 我需要提取zip文件中的内容。 这里有任何帮助。
答案 0 :(得分:0)
您的代码存在一些问题:outPut声明在哪里? output
不是文件而是字符串,因此exists()
和mkdir()
不存在。首先声明output
喜欢:
File output = new File("C:/1100");
此外,未声明outPut
(大P)。它类似output + File.seprator + zipEntry.getName()
。
bos = new BufferedOutputStream(new FileOutputStream(output + File.seprator + zipEntry.getName()));
请注意,您不需要将文件传递给FileOutputStream,因为构造函数显示在the documentation中。
此时,如果Zip文件不包含目录,则代码应该有效。但是,在打开输出流时,如果zipEntry.getName()有一个目录组件(例如somedir/filename.txt
),打开该流将产生FileNotFoundException
,作为您尝试的文件的父目录创造不存在。如果您希望能够处理此类zip文件,您可以在How to unzip files recursively in Java?