importjava.io.*;importjava.net.URI;importjava.util.Deque;importjava.util.LinkedList;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;publicclassZip{//실행 위한 메인 메서드publicstaticvoidmain(String[]args)throwsIOException{//압축할 폴더Filedir=newFile("C://workspace/jsSpeedTest");//zipFile 경로FilezipFile=newFile("C://workspace/file.zip");zip(dir,zipFile);}publicstaticvoidzip(Filedirectory,FilezipFile)throwsIOException{URIbase=directory.toURI();Deque<File>deque=newLinkedList<File>();deque.push(directory);OutputStreamout=newFileOutputStream(zipFile);Closeableres=out;try{ZipOutputStreamzout=newZipOutputStream(out);res=zout;while(!deque.isEmpty()){directory=deque.pop();for(Filekid:directory.listFiles()){Stringname=base.relativize(kid.toURI()).getPath();//폴더면 경로 하나 더 들어가서 압축if(kid.isDirectory()){deque.push(kid);name=name.endsWith("/")?name:name+"/";zout.putNextEntry(newZipEntry(name));}else{//파일이면 그냥 압축zout.putNextEntry(newZipEntry(name));//private static void copy(File file, OutputStream out) 실행copy(kid,zout);zout.closeEntry();}}}}finally{res.close();}}privatestaticvoidcopy(InputStreamin,OutputStreamout)throwsIOException{byte[]buffer=newbyte[1024];while(true){intreadCount=in.read(buffer);if(readCount<0){break;}out.write(buffer,0,readCount);}}privatestaticvoidcopy(Filefile,OutputStreamout)throwsIOException{InputStreamin=newFileInputStream(file);try{//copy(InputStream in, OutputStream out) 실행copy(in,out);}finally{in.close();}}}