java带密码zip4,基于zip4j开源框架实现android解压带有密码的zip文件(进度条显示)...

【实例简介】

基于zip4j开源框架实现android解压带有密码的zip文件(进度条显示),项目中有jar包,非常好用。解压、压缩、压缩添加密码、解压带有密码的zip都可以使用。

【实例截图】

【核心代码】

ZipDome

└── ZipDome

├── AndroidManifest.xml

├── bin

│   ├── AndroidManifest.xml

│   ├── ZipDome.apk

│   ├── classes

│   │   └── com

│   │   └── example

│   │   └── zipdome

│   │   ├── BuildConfig.class

│   │   ├── CompressKeys.class

│   │   ├── CompressStatus.class

│   │   ├── MainActivity$1.class

│   │   ├── MainActivity.class

│   │   ├── R$attr.class

│   │   ├── R$dimen.class

│   │   ├── R$drawable.class

│   │   ├── R$id.class

│   │   ├── R$layout.class

│   │   ├── R$menu.class

│   │   ├── R$string.class

│   │   ├── R$style.class

│   │   ├── R.class

│   │   ├── UzipProgress$1.class

│   │   ├── UzipProgress.class

│   │   └── ZipUtils.class

│   ├── classes.dex

│   ├── dexedLibs

│   │   ├── android-support-v4-52a3fa2067b86c709866c16715b7bbd6.jar

│   │   └── zip4j_1.3.1-5ac9cce4ed03953dcf557d91492f41e6.jar

│   ├── jarlist.cache

│   ├── res

│   │   └── crunch

│   │   ├── drawable-hdpi

│   │   │   └── ic_launcher.png

│   │   ├── drawable-mdpi

│   │   │   └── ic_launcher.png

│   │   ├── drawable-xhdpi

│   │   │   └── ic_launcher.png

│   │   └── drawable-xxhdpi

│   │   └── ic_launcher.png

│   └── resources.ap_

├── gen

│   └── com

│   └── example

│   └── zipdome

│   ├── BuildConfig.java

│   └── R.java

├── ic_launcher-web.png

├── libs

│   ├── android-support-v4.jar

│   └── zip4j_1.3.1.jar

├── proguard-project.txt

├── project.properties

├── res

│   ├── drawable-hdpi

│   │   └── ic_launcher.png

│   ├── drawable-mdpi

│   │   └── ic_launcher.png

│   ├── drawable-xhdpi

│   │   └── ic_launcher.png

│   ├── drawable-xxhdpi

│   │   └── ic_launcher.png

│   ├── layout

│   │   └── activity_main.xml

│   ├── menu

│   │   └── main.xml

│   ├── values

│   │   ├── dimens.xml

│   │   ├── strings.xml

│   │   └── styles.xml

│   ├── values-v11

│   │   └── styles.xml

│   ├── values-v14

│   │   └── styles.xml

│   └── values-w820dp

│   └── dimens.xml

└── src

└── com

└── example

└── zipdome

├── CompressKeys.java

├── CompressStatus.java

├── MainActivity.java

├── UzipProgress.java

└── ZipUtils.java

33 directories, 53 files

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您可以参考以下的代码实现: ```c++ // 头文件包含 #include <afxinet.h> // CInternetSession, CHttpFile #include <afxtempl.h> // CList #include <afx.h> // AfxMessageBox #include <zip.h> // libzip // 定义回调函数 int progress_callback(long long bytes_unzipped, long long bytes_total, void* user_data) { // 获取进度条控件指针 CProgressCtrl* pProgressCtrl = (CProgressCtrl*)user_data; // 计算解压进度百分比 int percent = int(bytes_unzipped * 100 / bytes_total); // 更新进度条 pProgressCtrl->SetPos(percent); // 返回 0 表示继续解压,返回 1 表示取消解压 return 0; } // 对话框类定义 class CMyDialog : public CDialogEx { public: CMyDialog(CWnd* pParent = nullptr) : CDialogEx(IDD_MYDIALOG, pParent) { } protected: virtual void DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_DOWNLOAD_PROGRESS, m_downloadProgressCtrl); DDX_Control(pDX, IDC_UNZIP_PROGRESS, m_unzipProgressCtrl); } DECLARE_MESSAGE_MAP() private: CProgressCtrl m_downloadProgressCtrl; // 下载进度条控件 CProgressCtrl m_unzipProgressCtrl; // 解压进度条控件 }; BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx) END_MESSAGE_MAP() // 主函数 int main() { // 创建 Internet 会话对象 CInternetSession session(NULL, 1, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); // 创建 HTTP 文件对象 CHttpFile* pHttpFile = session.OpenURL(_T("http://example.com/file.zip"), 0, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD); // 获取文件长度 DWORD dwFileSize = pHttpFile->Seek(0, FILE_END); pHttpFile->Seek(0, FILE_BEGIN); // 创建本地文件对象 CFile localFile(_T("file.zip"), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary); // 下载文件 BYTE buffer[1024]; DWORD dwBytesRead = 0; while ((dwBytesRead = pHttpFile->Read(buffer, sizeof(buffer))) > 0) { localFile.Write(buffer, dwBytesRead); // 计算下载进度百分比 int percent = int(localFile.GetPosition() * 100 / dwFileSize); // 更新进度条 pMyDialog->m_downloadProgressCtrl.SetPos(percent); } // 关闭 HTTP 文件对象和本地文件对象 pHttpFile->Close(); localFile.Close(); // 创建 ZIP 文件对象 struct zip* pZipFile = zip_open("file.zip", ZIP_RDONLY, NULL); // 获取 ZIP 文件中的文件数量 int nFiles = zip_get_num_files(pZipFile); // 创建 ZIP 文件文件列表 CList<CString, CString&> fileList; for (int i = 0; i < nFiles; i++) { const char* szName = zip_get_name(pZipFile, i, ZIP_FL_ENC_GUESS); // 转换文件名编码 CStringA strNameA(szName); CString strNameW; strNameW.Format(_T("%S"), (LPCSTR)strNameA); fileList.AddTail(strNameW); } // 按文件名排序 fileList.Sort(); // 创建解压进度条对话框 CMyDialog unzipDialog; unzipDialog.Create(IDD_UNZIP_DIALOG); // 显示解压进度条对话框 unzipDialog.ShowWindow(SW_SHOW); // 解压 ZIP 文件 for (POSITION pos = fileList.GetHeadPosition(); pos != NULL;) { CString strFileName = fileList.GetNext(pos); // 打开 ZIP 文件中的文件 struct zip_file* pZipFileChild = zip_fopen(pZipFile, strFileName, ZIP_FL_ENC_GUESS); // 获取文件长度 zip_stat_t stat; zip_stat(pZipFile, strFileName, ZIP_FL_ENC_GUESS, &stat); DWORD dwFileSize = stat.size; // 创建本地文件对象 CFile localFile(strFileName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary); // 解压文件 BYTE buffer[1024]; DWORD dwBytesRead = 0; long long bytes_unzipped = 0; while ((dwBytesRead = zip_fread(pZipFileChild, buffer, sizeof(buffer))) > 0) { localFile.Write(buffer, dwBytesRead); // 计算解压进度百分比 bytes_unzipped += dwBytesRead; int percent = int(bytes_unzipped * 100 / dwFileSize); // 更新进度条 unzipDialog.m_unzipProgressCtrl.SetPos(percent); } // 关闭 ZIP 文件中的文件和本地文件对象 zip_fclose(pZipFileChild); localFile.Close(); } // 关闭 ZIP 文件对象 zip_close(pZipFile); // 销毁解压进度条对话框 unzipDialog.DestroyWindow(); // 销毁 Internet 会话对象 session.Close(); return 0; } ``` 需要注意的是,代码中使用了第三方库 libzip解压 ZIP 文件,您需要在项目中添加 libzip 的头文件和库文件,并将库文件添加到链接器的输入选项中。 另外,在代码中创建了两个进度条控件,分别用于显示下载进度和解压进度。您需要在对话框模板中添加两个进度条控件,并通过 `DoDataExchange` 函数将其与成员变量关联起来。此外,还需要定义一个对话框类,并将进度条控件的更新操作放在对应的回调函数中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值