在java中解压后删除zip文件
如何在java中删除zip文件?file.delete方法返回false。为什么?在java中解压后删除zip文件,java,delete-file,Java,Delete File,如何在java中删除zip文件?file.delete方法返回false。为什么? File file = new File("/mibook/"+mFilename+"/"+mZipname.toString()); boolean deleted = file.delete(); 编辑: 规则“删除前目录应为空…”是否适用于zip文件 我的文件解压缩代码 public void unzip() throws IOException { FileInputStrea
File file = new File("/mibook/"+mFilename+"/"+mZipname.toString());
boolean deleted = file.delete();
编辑:规则“删除前目录应为空…”是否适用于zip文件 我的文件解压缩代码
public void unzip() throws IOException {
FileInputStream fin=null;
ZipInputStream zin=null;
File file =null;
ZipEntry ze ;
FileOutputStream fout=null;
try{
System.out.println(_zipFile );
System.out.println(_location);
fin = new FileInputStream(_zipFile);
zin = new ZipInputStream(fin);
ze= null;
byte[] buffer = new byte[1024];
int length;
while ((ze = zin.getNextEntry()) != null) {
file = new File((_location +"/" + ze.getName()));
file.getParentFile().mkdirs();
fout= new FileOutputStream(_location + ze.getName());
while ((length = zin.read(buffer))>0) {
fout.write(buffer, 0, length);
}
zin.closeEntry();
fout.close();
}
zin.close();
}catch(Exception e) {
Log.e("Decompress", "unzip", e);
}
finally {
fin.close();
zin.close();
fout.close();
}
}
如果file.delete()
返回false,那么我猜另一个进程打开了zip文件,甚至可能是您自己的进程
- 检查路径是否正确,例如,
返回什么file.exists()
- 检查您是否具有以运行应用程序的用户身份删除该文件的权限
- 检查您的代码中是否没有打开的文件句柄(例如,您是否只是从中读取而没有关闭输入流?)
- 检查您是否没有在桌面应用程序中打开该文件
关闭用于创建解压缩文件的FileWriter
如果您无法找到关闭文件的位置,最好的办法可能是调用file.deleteOnExit()
,即使您意外地打开了几个文件句柄,该操作也会成功。您必须确保关闭ZipFile
例如,我有:
使用:FileUtils.delete(您的文件)代码>
这纠正了我的问题请发布您使用的代码。要更快获得更好的帮助,请发布SSCCE()。考虑到问题代码下载了一个Zip文件,您可以使用我网站上的basicservice.Zip文件(),它大约3Kb。jon在我的代码中,我只下载了一个Zip文件,然后解压缩到其他位置,然后我尝试删除Zip文件。违反了什么条件?如果是这样的话,我能从中恢复吗?假设你用Java做了所有这些,最可能的问题是你的代码仍然有ZipStream打开。@vnshetty:我同意Stephen的观点。我怀疑你没能在某处关闭一条小溪。但是,如果没有看到您的代码,我们无法判断@Stephen@jon编辑了我的任务。@vnshetty:我很高兴,但是为了完整起见,您的每个close
方法都应该在自己的finally块中(或者使用类似于Guava的closequity
方法)。否则,如果一个close方法抛出异常,其他流将不会关闭。
ZipFile zFile = new ZipFile("blah");
//lots-o-code
zFile.close();
File file = new File("blah");
file.delete();