java zip文件夹,然后删除原始文件夹

java zip文件夹,然后删除原始文件夹,java,zip,delete-file,Java,Zip,Delete File,我有一个类将包含三个“.txt”文件的文件夹“UNO”压缩成一个名为“UNO.zip”的zip文件,还有一个类递归删除原始文件夹“UNO”及其所有内容。当我分别执行它们时,它们就像一个符咒。但是当我尝试在同一个线程中执行它们时,压缩会正常进行,但是删除部分只是删除文件夹中最后一个“.txt”文件。。。我还要再运行两次这个类,这样它就会删除“.txt”文件,最后是原始文件夹 谁能告诉我为什么会这样? 谢谢 代码如下: import java.io.File; import java.io.File

我有一个类将包含三个“.txt”文件的文件夹“UNO”压缩成一个名为“UNO.zip”的zip文件,还有一个类递归删除原始文件夹“UNO”及其所有内容。当我分别执行它们时,它们就像一个符咒。但是当我尝试在同一个线程中执行它们时,压缩会正常进行,但是删除部分只是删除文件夹中最后一个“.txt”文件。。。我还要再运行两次这个类,这样它就会删除“.txt”文件,最后是原始文件夹

谁能告诉我为什么会这样? 谢谢

代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Z3 {

    public static void main(String[] args) {

        byte[] buffer = new byte[1024];
        String ruta = "C:\\DESCARGAS\\";
        String nombreDeLaCarpeta = "UNO";
        List<String> nombresDeLosArchivos = new ArrayList<String>();

          File carpeta = new File( ruta + nombreDeLaCarpeta );
          File[] listadoEnCarpeta = carpeta.listFiles();
                if ( listadoEnCarpeta != null ) {
                    for ( int i = 0; i < listadoEnCarpeta.length; i ++ ) {

                        nombresDeLosArchivos.add( listadoEnCarpeta[i].getPath().substring( ruta.length() + nombreDeLaCarpeta.length() + 1, 
                                listadoEnCarpeta[i].getPath().length() ) );

                    }
               }

        FileOutputStream fos = null;
        ZipEntry ze = null;
        FileInputStream in = null;
        ZipOutputStream zos = null;

        try {
            fos = new FileOutputStream( "C:\\DESCARGAS\\UNO.zip" );
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        zos = new ZipOutputStream( fos );

        for ( int i = 0; i < nombresDeLosArchivos.size(); i ++ ) {
            ze = new ZipEntry( nombresDeLosArchivos.get(i) );
            try {
                zos.putNextEntry( ze );
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in = new FileInputStream( ruta + nombreDeLaCarpeta + "\\" + nombresDeLosArchivos.get(i) );
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

            int len;
            try {
                while ( ( len = in.read( buffer ) ) > 0 ) {
                    zos.write( buffer, 0, len );
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            }

            try {
                in.close();
                zos.closeEntry();
                zos.flush();
                zos.close();
                fos.flush();
                fos.close();

            } catch (IOException e) {
                e.printStackTrace();
            }

            // ------------------------------------------------------------

            File directory = new File( ruta + nombreDeLaCarpeta );
            if ( directory.exists() ) {
                    try {
                        eliminarSubcarpetas( directory );
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
            }


    }

    public static void eliminarSubcarpetas( File file ) throws IOException {

        File[] files = file.listFiles();
        if ( files != null ) {
            for ( File f: files ) {
                if ( f.isDirectory() ) {
                    eliminarSubcarpetas( f );
                } else {
                    f.delete();
                    System.out.println( f.getAbsolutePath() );
                }
            }
        }


      file.delete();

    }

}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Z2 {

    public static void main(String[] args) throws IOException  {

        List<String> nombresDeLosArchivos = new ArrayList<String>();

        File carpeta = new File( "C:\\DESCARGAS\\UNO" );
        File[] listadoEnCarpeta = carpeta.listFiles();

                if ( listadoEnCarpeta != null ) {
                    for ( int i = 0; i < listadoEnCarpeta.length; i ++ ) {

                        nombresDeLosArchivos.add( listadoEnCarpeta[i].getPath() );

                    }
               }

            zipArchivo( "C:\\DESCARGAS\\UNO.zip", nombresDeLosArchivos);

            File directory = new File( "C:\\DESCARGAS\\UNO" );
            if ( directory.exists() ) {

                    try {
                        eliminarSubcarpetas( directory );
                    } catch (IOException e) {
                        e.printStackTrace();
                    }   
            }


    }

    public static void zipArchivo( String zipFile, List<String> listaDeStrings ) throws IOException {

        byte[] buffer = new byte[1024];
        FileOutputStream fos = new FileOutputStream( zipFile );
        ZipOutputStream zos = new ZipOutputStream( fos );

        for ( int i = 0; i < listaDeStrings.size(); i ++ ) {

            File scrFile = new File( listaDeStrings.get(i) ); 
            FileInputStream fis = new FileInputStream ( scrFile );
            zos.putNextEntry( new ZipEntry ( scrFile.getName() ) );

            int length;

            while ( ( length = fis.read( buffer) ) > 0 ) {
                zos.write( buffer, 0, length );
            }

            zos.closeEntry();

            fis.close();

        }

        zos.close();


    }

    public static void eliminarSubcarpetas( File file ) throws IOException {

        File[] files = file.listFiles();
        if ( files != null ) {

            for ( File f: files ) {
                  if ( f.isDirectory() ) {
                    eliminarSubcarpetas( f );
                } else {
                    f.delete();
                }
            }
        }

        file.delete();

    }

}
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.zip.ZipEntry;
导入java.util.zip.ZipoutStream;
公共类Z3{
公共静态void main(字符串[]args){
字节[]缓冲区=新字节[1024];
字符串ruta=“C:\\DESCARGAS\\”;
字符串nombreDeLaCarpeta=“UNO”;
List nombresdelossarchivos=new ArrayList();
文件地毯A=新文件(ruta+nombreDeLaCarpeta);
文件[]listadoEnCarpeta=ru毯a.listFiles();
if(listadoEnCarpeta!=null){
for(int i=0;i0){
写入(缓冲区,0,len);
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
试一试{
in.close();
zos.closeEntry();
zos.flush();
zos.close();
fos.flush();
fos.close();
}捕获(IOE异常){
e、 printStackTrace();
}
// ------------------------------------------------------------
文件目录=新文件(ruta+nombreDeLaCarpeta);
if(directory.exists()){
试一试{
EliminarSubrufaras(目录);
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
公共静态void EliminarSubrubeas(文件文件)引发IOException{
File[]files=File.listFiles();
如果(文件!=null){
用于(文件f:文件){
if(f.isDirectory()){
Eliminarsubareas(f);
}否则{
f、 删除();
System.out.println(f.getAbsolutePath());
}
}
}
delete();
}
}

输出流未正确关闭是一个简单的问题。我只需要把压缩块放在一个不同的方法中,这就成功了

代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Z3 {

    public static void main(String[] args) {

        byte[] buffer = new byte[1024];
        String ruta = "C:\\DESCARGAS\\";
        String nombreDeLaCarpeta = "UNO";
        List<String> nombresDeLosArchivos = new ArrayList<String>();

          File carpeta = new File( ruta + nombreDeLaCarpeta );
          File[] listadoEnCarpeta = carpeta.listFiles();
                if ( listadoEnCarpeta != null ) {
                    for ( int i = 0; i < listadoEnCarpeta.length; i ++ ) {

                        nombresDeLosArchivos.add( listadoEnCarpeta[i].getPath().substring( ruta.length() + nombreDeLaCarpeta.length() + 1, 
                                listadoEnCarpeta[i].getPath().length() ) );

                    }
               }

        FileOutputStream fos = null;
        ZipEntry ze = null;
        FileInputStream in = null;
        ZipOutputStream zos = null;

        try {
            fos = new FileOutputStream( "C:\\DESCARGAS\\UNO.zip" );
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        zos = new ZipOutputStream( fos );

        for ( int i = 0; i < nombresDeLosArchivos.size(); i ++ ) {
            ze = new ZipEntry( nombresDeLosArchivos.get(i) );
            try {
                zos.putNextEntry( ze );
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in = new FileInputStream( ruta + nombreDeLaCarpeta + "\\" + nombresDeLosArchivos.get(i) );
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

            int len;
            try {
                while ( ( len = in.read( buffer ) ) > 0 ) {
                    zos.write( buffer, 0, len );
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            }

            try {
                in.close();
                zos.closeEntry();
                zos.flush();
                zos.close();
                fos.flush();
                fos.close();

            } catch (IOException e) {
                e.printStackTrace();
            }

            // ------------------------------------------------------------

            File directory = new File( ruta + nombreDeLaCarpeta );
            if ( directory.exists() ) {
                    try {
                        eliminarSubcarpetas( directory );
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
            }


    }

    public static void eliminarSubcarpetas( File file ) throws IOException {

        File[] files = file.listFiles();
        if ( files != null ) {
            for ( File f: files ) {
                if ( f.isDirectory() ) {
                    eliminarSubcarpetas( f );
                } else {
                    f.delete();
                    System.out.println( f.getAbsolutePath() );
                }
            }
        }


      file.delete();

    }

}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Z2 {

    public static void main(String[] args) throws IOException  {

        List<String> nombresDeLosArchivos = new ArrayList<String>();

        File carpeta = new File( "C:\\DESCARGAS\\UNO" );
        File[] listadoEnCarpeta = carpeta.listFiles();

                if ( listadoEnCarpeta != null ) {
                    for ( int i = 0; i < listadoEnCarpeta.length; i ++ ) {

                        nombresDeLosArchivos.add( listadoEnCarpeta[i].getPath() );

                    }
               }

            zipArchivo( "C:\\DESCARGAS\\UNO.zip", nombresDeLosArchivos);

            File directory = new File( "C:\\DESCARGAS\\UNO" );
            if ( directory.exists() ) {

                    try {
                        eliminarSubcarpetas( directory );
                    } catch (IOException e) {
                        e.printStackTrace();
                    }   
            }


    }

    public static void zipArchivo( String zipFile, List<String> listaDeStrings ) throws IOException {

        byte[] buffer = new byte[1024];
        FileOutputStream fos = new FileOutputStream( zipFile );
        ZipOutputStream zos = new ZipOutputStream( fos );

        for ( int i = 0; i < listaDeStrings.size(); i ++ ) {

            File scrFile = new File( listaDeStrings.get(i) ); 
            FileInputStream fis = new FileInputStream ( scrFile );
            zos.putNextEntry( new ZipEntry ( scrFile.getName() ) );

            int length;

            while ( ( length = fis.read( buffer) ) > 0 ) {
                zos.write( buffer, 0, length );
            }

            zos.closeEntry();

            fis.close();

        }

        zos.close();


    }

    public static void eliminarSubcarpetas( File file ) throws IOException {

        File[] files = file.listFiles();
        if ( files != null ) {

            for ( File f: files ) {
                  if ( f.isDirectory() ) {
                    eliminarSubcarpetas( f );
                } else {
                    f.delete();
                }
            }
        }

        file.delete();

    }

}
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.zip.ZipEntry;
导入java.util.zip.ZipoutStream;
公共类Z2{
公共静态void main(字符串[]args)引发IOException{
List nombresdelossarchivos=new ArrayList();
文件A=新文件(“C:\\DESCARGAS\\UNO”);
文件[]listadoEnCarpeta=ru毯a.listFiles();
if(listadoEnCarpeta!=null){
for(int i=0;i0){
写入(缓冲区,0,长度);
}
zos.closeEntry();
fis.close();
}