我在拉链后删除了diretory。我使用以下代码进行zip和删除。
我可以做zip并且无法删除该文件夹。
任何人都可以指出我在哪里做错了。
这里是我使用的代码
public class ZipDirectory {
public static void main(String[] a) throws Exception {
zipFolder("d:\\conf2", "d:\\conf2.zip");
}
static public void zipFolder(String srcFolder, String destZipFile) throws Exception {
ZipOutputStream zip = null;
FileOutputStream fileWriter = null;
fileWriter = new FileOutputStream(destZipFile);
zip = new ZipOutputStream(fileWriter);
addFolderToZip("", srcFolder, zip);
zip.flush();
zip.close();
delete(new File(srcFolder));
}
static private void addFileToZip(String path, String srcFile, ZipOutputStream zip)
throws Exception {
File folder = new File(srcFile);
if (folder.isDirectory()) {
addFolderToZip(path, srcFile, zip);
} else {
byte[] buf = new byte[1024];
int len;
FileInputStream in = new FileInputStream(srcFile);
zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));
while ((len = in.read(buf)) > 0) {
zip.write(buf, 0, len);
}
}
}
static private void addFolderToZip(String path, String srcFolder, ZipOutputStream zip)
throws Exception {
File folder = new File(srcFolder);
for (String fileName : folder.list()) {
addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip);
}
}
static private void delete (File path){
if( path.exists() ) {
File[] files = path.listFiles();
for(int i=0; i<files.length; i++) {
files[i].delete();
}
}
path.delete();
}
}
答案 0 :(得分:4)
请关闭FileInputStream
的实例以使删除成功。
请在in.close()
方法中添加addFileToZip()
。
答案 1 :(得分:1)
在跟踪删除方法时,它显示以下
07:58:12.734018754 0x2970500 mt.0 Entry&gt; java / io / File.delete()Z字节码方法,这= 0xfffc4810
07:58:12.734019108 0x2970500 mt.3 Entry&gt; java / lang / System.getSecurityManager()Ljava / lang / SecurityManager;字节码静态方法
07:58:12.734019462 0x2970500 mt.9退出
07:58:12.734019815 0x2970500 mt.0 Entry&gt; java / io / File.isInvalid()Z字节码方法,这= 0xfffc4810
在删除文件时,安全管理器拒绝删除该文件,因为已存在与之关联的文件描述符。关闭Fileinput流以避免这种情况。
答案 2 :(得分:0)
您没有整理已创建的ZipOutputStream对象。尝试在代码中替换以下方法。在这里,我在try-with-resource中创建了ZipOutputStrean对象,并且它可以工作
static public void zipFolder(String srcFolder, String destZipFile) throws Exception {
try(ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(destZipFile)))
{
addFolderToZip("", srcFolder, zip);
zip.flush();
zip.close();
delete(new File(srcFolder));
}
}