java压缩指定目录下的所有文件和文件夹
import java.io.*; import java.util.*; import java.util.zip.*; String sourceDir="E:\\test"; int parentDirectoryLen=sourceDir.lastIndexOf(File.separator)+1; File[] copyfoldersList = new File(sourceDir).listFiles(); FileOutputStream fos = new FileOutputStream("E:\\test.zip"); ZipOutputStream zipOut = new ZipOutputStream(fos); for (int k = 0; k < copyfoldersList.length; k++) { if (copyfoldersList[k].isDirectory()) { LinkedList<String> copysourcepath = new LinkedList<String>(Arrays.asList(copyfoldersList[k].getAbsolutePath())); while (copysourcepath.size() > 0) { File folders = new File(copysourcepath.peek()); String[] file = folders.list(); for (int i = 0; i < file.length; i++) { File ff = new File(copysourcepath.peek(), file[i]); if (ff.isFile()) { FileInputStream fis =null; try { fis = new FileInputStream(ff); ZipEntry entry = new ZipEntry(ff.getAbsoluteFile().substring(parentDirectoryLen)); zipOut.putNextEntry(entry); int nNumber; byte[] buffer = new byte[Long.MIN_VALUE]; while ((nNumber = fis.read(buffer)) != -1) zipOut.write(buffer, 0, nNumber); } catch (IOException e) { e.printStackTrace(); zipOut.close(); fos.close(); }finally{ try { fis.close(); } catch (IOException e) {} } } else if (ff.isDirectory()) { for (File f : temp.listFiles()) { if (f.isDirectory()) copysourcepath.add(f.getPath()); else if (f.isFile()) { FileInputStream fis =null; try { fis = new FileInputStream(f); ZipEntry entry = new ZipEntry(f.getAbsoluteFile().substring(parentDirectoryLen)); zipOut.putNextEntry(entry); int nNumber; byte[] buffer = new byte[Long.MIN_VALUE]; while ((nNumber = fis.read(buffer)) != -1) zipOut.write(buffer, 0, nNumber); } catch (IOException e) { e.printStackTrace(); zipOut.close(); fos.close(); }finally{ try { fis.close(); } catch (IOException e) {} } } } } } copysourcepath.removeFirst(); } } } try { zipOut.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ try { zipOut.close(); fos.close(); } catch (IOException e) {} }