java中的删除目录不是删除目录
我删除目录后压缩相同。我使用下面的代码来制作zip和delete 我可以做压缩,不能删除文件夹 谁能告诉我我哪里做错了 这里是我使用的代码java中的删除目录不是删除目录,java,zip,Java,Zip,我删除目录后压缩相同。我使用下面的代码来制作zip和delete 我可以做压缩,不能删除文件夹 谁能告诉我我哪里做错了 这里是我使用的代码 public class ZipDirectory { public static void main(String[] a) throws Exception { zipFolder("d:\\conf2", "d:\\conf2.zip"); } static p
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();
}
}
公共类ZipDirectory{
公共静态void main(字符串[]a)引发异常{
zipFolder(“d:\\conf2”,“d:\\conf2.zip”);
}
静态公共void zipFolder(String srcFolder,String destZipFile)引发异常{
ZipOutputStream zip=null;
FileOutputStream fileWriter=null;
fileWriter=新的FileOutputStream(destZipFile);
zip=新的ZipoutStream(fileWriter);
addFolderToZip(“”,srcFolder,zip);
zip.flush();
zip.close();
删除(新文件(srcFolder));
}
静态私有void addFileToZip(字符串路径、字符串srcFile、ZipOutputStream zip)
抛出异常{
文件夹=新文件(srcFile);
if(folder.isDirectory()){
addFolderToZip(路径,srcFile,zip);
}否则{
字节[]buf=新字节[1024];
内伦;
FileInputStream in=新的FileInputStream(srcFile);
putNextEntry(新的ZipEntry(path+“/”+folder.getName());
而((len=in.read(buf))>0){
zip.write(buf,0,len);
}
}
}
静态私有void addFolderToZip(字符串路径、字符串srcFolder、ZipoutStream zip)
抛出异常{
文件夹=新文件(srcFolder);
对于(字符串文件名:folder.list()){
addFileToZip(路径+“/”+文件夹.getName(),srcFolder+“/”+文件名,zip);
}
}
静态私有void delete(文件路径){
if(path.exists()){
File[]files=path.listFiles();
对于(int i=0;i请关闭FileInputStream
的实例以成功删除
请在.close()中添加
在添加文件到zip()
方法中。请关闭文件输入流的实例以使删除成功
请在.close()中添加
在addFileToZip()
方法中。您没有冷却您创建的ZipoutStream对象。请尝试在代码中替换以下方法。在这里,我已在Try with resource中创建了ZipoutStream对象,并且成功了
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));
}
}
您没有冷却已创建的ZipoutpStream对象。请尝试在代码中替换以下方法。在这里,我已在Try with resource中创建了ZipoutpStream对象,并且成功了
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));
}
}
在跟踪delete方法时,它显示如下
07:58:12.734018754 0x2970500 mt.0 Entry>java/io/File.delete()Z字节码方法,此方法=0xfffc4810
07:58:12.734019108 0x2970500 mt.3条目>java/lang/System.getSecurityManager()Ljava/lang/SecurityManager;字节码静态方法
07:58:12.734019462 0x2970500 mt.9出口
07:58:12.734019815 0x2970500 mt.0 Entry>java/io/File.isInvalid()Z字节码方法,此方法=0xfffc4810
删除文件时,安全管理器拒绝删除该文件,因为已存在与该文件关联的文件描述符。请关闭Fileinput流以避免出现这种情况
在跟踪delete方法时,它显示如下
07:58:12.734018754 0x2970500 mt.0 Entry>java/io/File.delete()Z字节码方法,此方法=0xfffc4810
07:58:12.734019108 0x2970500 mt.3条目>java/lang/System.getSecurityManager()Ljava/lang/SecurityManager;字节码静态方法
07:58:12.734019462 0x2970500 mt.9出口
07:58:12.734019815 0x2970500 mt.0 Entry>java/io/File.isInvalid()Z字节码方法,此方法=0xfffc4810
删除文件时,安全管理器拒绝删除该文件,因为已存在与该文件关联的文件描述符。请关闭Fileinput流以避免出现这种情况
此文件夹中是否有目录?是否收到任何错误消息或异常?请检查文件[i].delete()的返回值
。如果不成功,则为false
。可能该目录包含@SachinGupta已指出的子目录。有关如何删除整个文件树的信息,请参阅Java API文档中的FileVisitor
的第一个示例:如果目录不为空,则无法删除该目录,这可能是删除()的原因之一API失败。此文件夹中是否有目录?是否收到任何错误消息或异常?请检查文件[i]的返回值。删除()
。如果不成功,则为false
。可能该目录包含@SachinGupta已指出的子目录。有关如何删除整个文件树的信息,请参阅Java API文档中的FileVisitor
的第一个示例:如果目录不为空,则无法删除该目录,这可能是删除()的原因之一API失败。我在此文件夹下没有子目录。@Mary.Hansen我已经编辑了我的答案,请关闭FileInputStream
的实例。我想在那之后它会工作的。我在此文件夹下没有子目录。@Mary.Hansen我已经编辑了我的答案,请关闭FileInputStream
的实例。我想在那之后它将我工作。但是,它没有删除文件夹。我复制了这个方法。有什么想法吗?在你的addFileToZip方法中,关闭FileInputStream对象,你的问题就会得到解决。“In.close();”不过,它并没有删除文件夹。我复制了该方法。有什么想法吗?在您的addFileToZip方法中,关闭FileInputStream对象,您的问题就会得到解决。“In.close();