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