У меня есть класс, который сжимает папку "UNO", которая содержит три файла ".txt", в zip-файл с именем "UNO.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();
}
}