Zip打包原代码

本文提供了一个使用Java实现ZIP文件压缩的示例代码。该示例展示了如何将指定文件夹及其内容压缩成ZIP文件,并为ZIP文件添加注释。
<p>
</p>
<p>import java.io.BufferedInputStream;</p>
<p>import java.io.BufferedOutputStream;</p>
<p>import java.io.File;</p>
<p>import java.io.FileInputStream;</p>
<p>import java.io.FileOutputStream;</p>
<p>import java.text.ParseException;</p>
<p>import java.text.SimpleDateFormat;</p>
<p>import java.util.zip.Adler32;</p>
<p>import java.util.zip.CheckedOutputStream;</p>
<p>import java.util.zip.ZipEntry;</p>
<p>import java.util.zip.ZipOutputStream;</p>
<p></p>
<p>public class Zip {</p>
<p>public void ZipFiles(String file, String savepath) {</p>
<p><span> </span> try {</p>
<p><span> </span> File inFile = new File(file);</p>
<p><span> </span> FileOutputStream fout = new FileOutputStream(savepath);</p>
<p><span> </span> // 使用输出流检查</p>
<p><span> </span> CheckedOutputStream cs = new CheckedOutputStream(fout,new Adler32());</p>
<p><span> </span> // 声明输出zip流</p>
<p><span> </span> ZipOutputStream zout = new ZipOutputStream(new BufferedOutputStream(cs));</p>
<p><span> </span> // 写一个注释</p>
<p><span> </span> zout.setComment("This is the comment");</p>
<p><span> </span> zip(zout, inFile, "", cs);</p>
<p><span> </span> zout.close();</p>
<p><span> </span> } catch (Exception e) {</p>
<p><span> </span> System.err.println(e);</p>
<p><span> </span> }</p>
<p>}</p>
<p></p>
<p>private void zip(ZipOutputStream out, File inFile, String root,CheckedOutputStream cs) throws Exception {</p>
<p><span> </span> if (inFile.isDirectory()) {</p>
<p><span> </span> File[] files = inFile.listFiles();</p>
<p><span> </span> out.putNextEntry(new ZipEntry(root + "/"));</p>
<p><span> </span> root = root.length() == 0 ? "" : root + "/";</p>
<p><span> </span> for (int i = 0; i < files.length; i++) {</p>
<p><span> </span> zip(out, files[i], root + files[i].getName(), cs);</p>
<p><span> </span> }</p>
<p><span> </span> }else{</p>
<p><span> </span> BufferedInputStream in = new BufferedInputStream(new FileInputStream(inFile));</p>
<p><span> </span> out.putNextEntry(new ZipEntry(root));</p>
<p><span> </span> int c;</p>
<p><span> </span> while ((c = in.read()) != -1)</p>
<p><span> </span> out.write(c);</p>
<p><span> </span> in.close();</p>
<p><span> </span> // System.out.println("Checksum::" + cs.getChecksum().getValue());</p>
<p><span> </span> }</p>
<p>}</p>
<p></p>
<p>public static void main(String[] args){</p>
<p><span> </span> new Zip().ZipFiles("E://BAK","E://BAK.ZIP");</p>
<p><span> </span></p>
<p><span> </span> String a = "2010";</p>
<p><span> </span> SimpleDateFormat sdf = new SimpleDateFormat("yyyy");</p>
<p><span> </span></p>
<p><span> </span> try {</p>
<p><span> </span>System.out.println(sdf.parse(a));</p>
<p><span> </span>} catch (ParseException e) {</p>
<p><span> </span>// TODO Auto-generated catch block</p>
<p><span> </span>e.printStackTrace();</p>
<p><span> </span>}</p>
<p>}</p>
<p>}</p>
使用ZLIB库 包装的压缩解压缩文件的源码 VS2005 工程创建 /* */ class ZIPWRAP_EXP CZipper { public: CZipper(); virtual ~CZipper(); // simple interface static bool ZipFile(const char* szFilePath); // saves as same name with .zip static bool ZipFolder(const char* szFilePath, bool ignoreself = false); // saves as same name with .zip bool AddFolderToZipFile(const char*foldername, const char* rootfolder); bool AddFileToZipFile(const char*filename, const char*relfolder = NULL, const char* comment = NULL); bool AddFolderOnlyPathToFile(const char* foldername, const char* comment = NULL); bool OpenZipFile(const char* zipfilename, bool append = false); bool CloseZipFile(const char* global_comment = NULL); private: void* zipfile_;/* = NULL */ }; /* */ #define MAX_COMMENT (255) /* tm_unz contain date/time info */ typedef struct UZ_s { unsigned int tm_sec; /* seconds after the minute - [0,59] */ unsigned int tm_min; /* minutes after the hour - [0,59] */ unsigned int tm_hour; /* hours since midnight - [0,23] */ unsigned int tm_mday; /* day of the month - [1,31] */ unsigned int tm_mon; /* months since January - [0,11] */ unsigned int tm_year; /* years - [1980..2044] */ } UZ_s; // create our own fileinfo struct to hide the underlying implementation struct UZ_FileInfo { char szFileName[260 + 1]; char szComment[255 + 1]; unsigned long dwVersion; unsigned long dwVersionNeeded; unsigned long dwFlags; unsigned long dwCompressionMethod; unsigned long dwDosDate; unsigned long dwCRC; unsigned long dwCompressedSize; unsigned long dwUncompressedSize; unsigned long dwInternalAttrib; unsigned long dwExternalAttrib; bool bFolder; UZ_s tmu_date; }; class ZIPWRAP_EXP CUnZipper { public: CUnZipper(); virtual ~CUnZipper(); // simple interface static bool UnZip( const char* filename, const char* dstfolder, bool ingorepath = false, const char* password = NULL); bool OpenUnZipFile(const char* filename); bool CloseUnZipFile(); bool UnZipTo( const char* dstfolder, bool ingorepath = false, const char* password = NULL); int GetFileCount(); bool GotoFirstFile(); bool GotoNextFile(); bool GotoZipFile(int index); bool GotoZipFile(const char* zipfilename); bool GetCurrentFileInfo(UZ_FileInfo&fileinfo;); bool UnCurrentZipFile(const char* dstfolder, bool ingorepath = false, const char* password = NULL); bool UnOneZipFile(const char* filename, const char* dstfolder, bool ingorepath = false, const char* password = NULL); bool UnOneZipFile(int index, const char* dstfolder, bool ingorepath = false, const char* password = NULL); private: void* unzipfile_; };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值