壓縮解壓文件工具

一、maven依賴

<dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>2.11.5</version></dependency>

二、工具類

package com.summer.toolkit.util;import com.summer.toolkit.exception.BizException;
import lombok.extern.slf4j.Slf4j;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.model.AbstractFileHeader;
import net.lingala.zip4j.model.FileHeader;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.EncryptionMethod;
import org.apache.commons.lang3.StringUtils;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;/*** @author author* @date 2024/7/4 18:32*/@Slf4j
public class ZipUtils {/*** 壓縮單個文件* 或者向已有Zip文件中添加文件* 文件可以分開添加,即向同一個壓縮包中添加一個文件1,解壓密碼也為1,再添加一個文件2,解壓密碼為2,再添加一個文件3,沒有解壓密碼** @param fileName    要壓縮的文件名* @param zipFileName 生成的壓縮文件名* @throws BizException 壓縮文件時發生異常*/public static void compressFile(String fileName, String zipFileName) {ZipUtils.compressFile(fileName, zipFileName, null);}/*** 壓縮單個文件* 或者向已有Zip文件中添加文件** @param fileName       要壓縮的文件名* @param zipFileName    生成的壓縮文件名* @param passwordString 壓縮文件的密碼* @throws BizException 壓縮文件時發生異常*/public static void compressFile(String fileName, String zipFileName, String passwordString) {// 密碼不為空則加密文件ZipParameters zipParameters = StringUtils.isNotBlank(passwordString)? ZipUtils.getZipParameters(true): ZipUtils.getZipParameters(false);char[] password = StringUtils.isNotBlank(passwordString)? passwordString.toCharArray(): null;try (ZipFile zipFile = new ZipFile(zipFileName, password)) {zipFile.addFile(new File(fileName), zipParameters);} catch (IOException e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("壓縮文件異常");}}/*** 壓縮多個文件到一個壓縮包中* 或者向已有Zip文件中添加多個文件** @param fileList    要壓縮的文件列表* @param zipFileName 生成的壓縮文件名* @throws BizException 如果壓縮過程中發生錯誤*/public static void compressMultipleFiles(List<String> fileList, String zipFileName) {ZipUtils.compressMultipleFiles(fileList, zipFileName, null);}/*** 壓縮多個文件到一個壓縮包中* 或者向已有Zip文件中添加多個文件** @param fileList       要壓縮的文件列表* @param zipFileName    生成的壓縮文件名* @param passwordString 壓縮文件的密碼* @throws BizException 如果壓縮過程中發生錯誤*/public static void compressMultipleFiles(List<String> fileList, String zipFileName, String passwordString) {// 密碼不為空則加密文件ZipParameters zipParameters = StringUtils.isNotBlank(passwordString)? ZipUtils.getZipParameters(true): ZipUtils.getZipParameters(false);char[] password = StringUtils.isNotBlank(passwordString)? passwordString.toCharArray(): null;List<File> filesToAdd = new ArrayList<>();for (String originFile : fileList) {filesToAdd.add(new File(originFile));}try (ZipFile zipFile = new ZipFile(zipFileName, password)) {zipFile.addFiles(filesToAdd, zipParameters);} catch (IOException e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("壓縮文件異常");}}/*** 創建切分zip文件* 如果您想在大小超過特定限制時將zip文件拆分為多個文件可以使用此方法** @param fileList    要壓縮的文件列表* @param zipFileName 生成的壓縮文件名* @throws BizException 如果壓縮過程中發生錯誤*/public static void createSplitZipFile(List<String> fileList, String zipFileName) {long splitLength = 100 * 1024 * 1024;ZipUtils.createSplitZipFile(fileList, zipFileName, splitLength);}/*** 創建切分zip文件* 如果您想在大小超過特定限制時將zip文件拆分為多個文件可以使用此方法** @param fileList    要壓縮的文件列表* @param zipFileName 生成的壓縮文件名* @param splitLength 切分文件大小* @throws BizException 如果壓縮過程中發生錯誤*/public static void createSplitZipFile(List<String> fileList, String zipFileName, long splitLength) {ZipUtils.createSplitZipFile(fileList, zipFileName, null, splitLength);}/*** 創建切分zip文件* 如果您想在大小超過特定限制時將zip文件拆分為多個文件可以使用此方法** @param fileList       要壓縮的文件列表* @param zipFileName    生成的壓縮文件名* @param passwordString 壓縮文件的密碼* @throws BizException 如果壓縮過程中發生錯誤*/public static void createSplitZipFile(List<String> fileList, String zipFileName, String passwordString) {// 默認100Mlong splitLength = 100 * 1024 * 1024;ZipUtils.createSplitZipFile(fileList, zipFileName, passwordString, splitLength);}/*** 創建切分zip文件* 如果您想在大小超過特定限制時將zip文件拆分為多個文件可以使用此方法** @param fileList       要壓縮的文件列表* @param zipFileName    生成的壓縮文件名* @param passwordString 壓縮文件的密碼* @param splitLength    切分文件大小* @throws BizException 如果壓縮過程中發生錯誤*/public static void createSplitZipFile(List<String> fileList, String zipFileName, String passwordString, long splitLength) {// 密碼不為空則加密文件ZipParameters zipParameters = StringUtils.isNotBlank(passwordString)? ZipUtils.getZipParameters(true): ZipUtils.getZipParameters(false);char[] password = StringUtils.isNotBlank(passwordString)? passwordString.toCharArray(): null;List<File> filesToAdd = new ArrayList<>();for (String originFile : fileList) {filesToAdd.add(new File(originFile));}try (ZipFile zipFile = new ZipFile(zipFileName, password)) {zipFile.createSplitZipFile(filesToAdd, zipParameters, true, splitLength);} catch (IOException e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("壓縮文件異常");}}/*** 創建切分zip文件* 如果您想在大小超過特定限制時將zip文件拆分為多個文件可以使用此方法** @param folder      要壓縮的文件夾* @param zipFileName 生成的壓縮文件名* @throws BizException 如果壓縮過程中發生錯誤*/public static void createSplitZipFileFromFolder(String folder, String zipFileName) {// 默認100Mlong splitLength = 100 * 1024 * 1024;ZipUtils.createSplitZipFileFromFolder(folder, zipFileName, null, splitLength);}/*** 創建切分zip文件* 如果您想在大小超過特定限制時將zip文件拆分為多個文件可以使用此方法** @param folder         要壓縮的文件夾* @param zipFileName    生成的壓縮文件名* @param passwordString 壓縮文件的密碼* @throws BizException 如果壓縮過程中發生錯誤*/public static void createSplitZipFileFromFolder(String folder, String zipFileName, String passwordString) {long splitLength = 100 * 1024 * 1024;ZipUtils.createSplitZipFileFromFolder(folder, zipFileName, passwordString, splitLength);}/*** 創建切分zip文件* 如果您想在大小超過特定限制時將zip文件拆分為多個文件可以使用此方法** @param folder         要壓縮的文件夾* @param zipFileName    生成的壓縮文件名* @param passwordString 壓縮文件的密碼* @param splitLength    切分文件大小* @throws BizException 如果壓縮過程中發生錯誤*/public static void createSplitZipFileFromFolder(String folder, String zipFileName, String passwordString, long splitLength) {// 密碼不為空則加密文件ZipParameters zipParameters = StringUtils.isNotBlank(passwordString)? ZipUtils.getZipParameters(true): ZipUtils.getZipParameters(false);char[] password = StringUtils.isNotBlank(passwordString)? passwordString.toCharArray(): null;try (ZipFile zipFile = new ZipFile(zipFileName, password)) {zipFile.createSplitZipFileFromFolder(new File(folder), zipParameters, false, splitLength);} catch (IOException e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("壓縮文件異常");}}/*** 壓縮指定文件夾到一個zip文件中** @param folder      待壓縮文件夾的路徑* @param zipFileName 生成的zip文件的名稱* @throws BizException 當壓縮過程中發生錯誤時拋出*/public static void compressFolder(String folder, String zipFileName) {ZipUtils.compressFolder(folder, zipFileName, null);}/*** 壓縮指定文件夾到一個zip文件中** @param folder         待壓縮文件夾的路徑* @param zipFileName    生成的zip文件的名稱* @param passwordString 壓縮文件的密碼* @throws BizException 當壓縮過程中發生錯誤時拋出*/public static void compressFolder(String folder, String zipFileName, String passwordString) {// 密碼不為空則加密文件ZipParameters zipParameters = StringUtils.isNotBlank(passwordString)? ZipUtils.getZipParameters(true): ZipUtils.getZipParameters(false);char[] password = StringUtils.isNotBlank(passwordString)? passwordString.toCharArray(): null;try (ZipFile zipFile = new ZipFile(zipFileName, password)) {zipFile.addFolder(new File(folder), zipParameters);} catch (Exception e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("壓縮文件異常");}}/*** 壓縮輸入流到指定的ZIP文件** @param inputStream 輸入流,表示要壓縮的文件數據* @param zipFileName 壓縮后的ZIP文件名* @throws BizException 如果在壓縮過程中發生IO異常*/public static void compressInputStream(InputStream inputStream, String zipFileName, String fileNameInZip) {ZipUtils.compressInputStream(inputStream, zipFileName, fileNameInZip, null);}/*** 壓縮輸入流到指定的ZIP文件,并使用可選的密碼保護** @param inputStream    輸入流,表示要壓縮的文件數據* @param zipFileName    壓縮后的ZIP文件名* @param passwordString 可選的密碼,如果為空則不使用密碼保護* @throws BizException 如果在壓縮過程中發生IO異常*/public static void compressInputStream(InputStream inputStream, String zipFileName, String fileNameInZip, String passwordString) {// 密碼不為空則加密文件ZipParameters zipParameters = StringUtils.isNotBlank(passwordString)? ZipUtils.getZipParameters(true): ZipUtils.getZipParameters(false);char[] password = StringUtils.isNotBlank(passwordString)? passwordString.toCharArray(): null;zipParameters.setFileNameInZip(fileNameInZip);try (ZipFile zipFile = new ZipFile(zipFileName, password)) {zipFile.addStream(inputStream, zipParameters);} catch (IOException e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("壓縮文件異常");}}/*** 獲取Zip參數配置** @param encryptFiles 是否加密文件* @return ZipParameters 配置的Zip參數*/public static ZipParameters getZipParameters(boolean encryptFiles) {ZipParameters zipParameters = new ZipParameters();zipParameters.setEncryptFiles(encryptFiles);zipParameters.setEncryptionMethod(EncryptionMethod.ZIP_STANDARD);return zipParameters;}/*** 解壓縮指定的文件中的某個文件到目標路徑** @param zipFileName     ZIP 文件的名稱* @param fileNameInZip   需要解壓的文件名稱* @param destinationPath 解壓后文件的目標路徑* @throws BizException 如果解壓過程中出現異常*/public static void extractFile(String zipFileName, String fileNameInZip, String destinationPath) {ZipUtils.extractFile(zipFileName, fileNameInZip, destinationPath, null);}/*** 解壓指定的ZIP文件中的某個文件到目標路徑** @param zipFileName     ZIP文件的名稱* @param passwordString  解壓ZIP文件所需的密碼* @param fileNameInZip   需要解壓的文件名稱* @param destinationPath 解壓后的目標路徑* @throws BizException 如果解壓過程中發生異常*/public static void extractFile(String zipFileName, String fileNameInZip, String destinationPath, String passwordString) {char[] password = StringUtils.isNotBlank(passwordString)? passwordString.toCharArray(): null;try (ZipFile zipFile = new ZipFile(zipFileName, password)) {zipFile.extractFile(fileNameInZip, destinationPath);} catch (Exception e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("解壓文件異常");}}/*** 解壓縮指定的文件到目標路徑** @param zipFileName     ZIP 文件的名稱* @param destinationPath 解壓后文件的目標路徑* @throws BizException 如果解壓過程中出現異常*/public static void extractAllFile(String zipFileName, String destinationPath) {ZipUtils.extractAllFile(zipFileName, destinationPath, null);}/*** 解壓指定的ZIP文件到目標路徑。** @param zipFileName     ZIP文件的名稱* @param passwordString  解壓ZIP文件所需的密碼* @param destinationPath 解壓后的目標路徑* @throws BizException 如果解壓過程中發生異常*/public static void extractAllFile(String zipFileName, String destinationPath, String passwordString) {char[] password = StringUtils.isNotBlank(passwordString)? passwordString.toCharArray(): null;try (ZipFile zipFile = new ZipFile(zipFileName, password)) {zipFile.extractAll(destinationPath);} catch (Exception e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("解壓文件異常");}}/*** 從壓縮包中獲取文件流** @param zipFileName   壓縮后的ZIP文件名* @param fileNameInZip 輸入流,表示要壓縮的文件數據* @throws BizException 如果在壓縮過程中發生IO異常*/public static InputStream getInputStreamFromZip(String zipFileName, String fileNameInZip) {return ZipUtils.getInputStreamFromZip(zipFileName, fileNameInZip, null);}/*** 從壓縮包中獲取文件流** @param zipFileName   壓縮后的ZIP文件名* @param fileNameInZip 輸入流,表示要壓縮的文件數據* @throws BizException 如果在壓縮過程中發生IO異常*/public static InputStream getInputStreamFromZip(String zipFileName, String fileNameInZip, String passwordString) {char[] password = StringUtils.isNotBlank(passwordString)? passwordString.toCharArray(): null;try (ZipFile zipFile = new ZipFile(zipFileName, password)) {FileHeader fileHeader = zipFile.getFileHeader(fileNameInZip);return zipFile.getInputStream(fileHeader);} catch (IOException e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("從壓縮包中獲取文件流異常");}}/*** 列出ZIP文件中的所有文件名* 列出文件名也不需要密碼** @param zipFileName ZIP文件的文件名* @return ZIP文件中所有文件名的列表* @throws BizException 如果在處理ZIP文件時發生異常*/public static List<String> listAllFilesInZip(String zipFileName) {try (ZipFile zipFile = new ZipFile(zipFileName)) {List<FileHeader> fileHeaders = zipFile.getFileHeaders();return fileHeaders.stream().map(AbstractFileHeader::getFileName).toList();} catch (Exception e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("列出ZIP文件中的所有文件名異常");}}/*** 從壓縮文件中移除指定文件* 刪除文件無須密碼** @param zipFileName   壓縮文件的名稱* @param fileNameInZip 壓縮文件中要移除的文件的名稱* @throws BizException 當移除文件時發生異常*/public static void removeFileFromZip(String zipFileName, String fileNameInZip) {try (ZipFile zipFile = new ZipFile(zipFileName)) {zipFile.removeFile(fileNameInZip);} catch (Exception e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("從壓縮包中移除文件異常");}}/*** 設置壓縮文件的注釋** @param zipFileName 壓縮文件的文件名* @param comment     要設置的注釋內容* @throws BizException 當設置注釋時發生異常*/public static void setCommentForZip(String zipFileName, String comment) {try (ZipFile zipFile = new ZipFile(zipFileName)) {zipFile.setComment(comment);} catch (Exception e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("設置壓縮文件的注釋異常");}}/*** 獲取壓縮文件的注釋** @param zipFileName 壓縮文件的文件名* @throws BizException 當設置注釋時發生異常*/public static String getCommentForZip(String zipFileName) {try (ZipFile zipFile = new ZipFile(zipFileName)) {return zipFile.getComment();} catch (Exception e) {log.error("ZipUtils error {}", e.getMessage(), e);throw new BizException("獲取壓縮文件的注釋異常");}}}

三、測試類

@Testpublic void testCompressFile() {String filePath = "D:\\mytmp\\1948321_通用計費報表\\";String name = "1963692_通用計費報表_1.csv";String fileName = filePath + name;String zipFileName = filePath + "通用計費報表1.zip";String zipFileName2 = filePath + "通用計費報表2.zip";String zipFileName3 = filePath + "12.txt";ZipUtils.compressFile(fileName, zipFileName);ZipUtils.setCommentForZip(zipFileName, "abcdefghi123");System.out.println(ZipUtils.getCommentForZip(zipFileName));//ZipUtils.compressFile(fileName, zipFileName2, "123456");//ZipUtils.compressFile(zipFileName, zipFileName2, "123456");//ZipUtils.compressFile(zipFileName3, zipFileName2, "123456");ZipUtils.compressFile(fileName, zipFileName2);ZipUtils.compressFile(zipFileName, zipFileName2);ZipUtils.compressFile(zipFileName3, zipFileName2);List<String> files = ZipUtils.listAllFilesInZip(zipFileName2);System.out.println(JSON.toJSONString(files));ZipUtils.removeFileFromZip(zipFileName2, files.get(0));List<String> files2 = ZipUtils.listAllFilesInZip(zipFileName2);System.out.println(JSON.toJSONString(files2));ZipUtils.extractAllFile(zipFileName2, "D:\\mytmp\\excel");//ZipUtils.extractAllFile(zipFileName2, "D:\\mytmp\\excel", "123456");}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40677.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40677.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Day05-03-Nexus倉庫

Day05-03-Nexus倉庫 05-nexus-倉庫1. 概述2. 極速部署指南2.1 下載2.2 部署2.3 配置2.4 連接使用nexus2.4 編譯與測試 3. 總結 05-nexus-倉庫 1. 概述 背景: maven編譯的時候&#xff0c;npm/cnpm編譯&#xff0c;需要下載大量的依賴包。這些依賴包在每一次構建的時候都需要使…

React 省市查詢組件完整代碼

目錄 一、地區文件 二、Antd配合使用 三、實現效果 一、地區文件 下載地址&#xff1a;全國省市區數據_JSON格式_SQL格式 export const chinaArea {0: {1: 北京,2: 天津,3: 河北省,4: 山西省,5: 內蒙古自治區,6: 遼寧省,7: 吉林省,8: 黑龍江省,9: 上海,10: 江蘇省,11: 浙…

Perl 語言入門學習指南:探索高效腳本編程的奧秘

引言 Perl&#xff0c;全稱Practical Extraction and Report Language&#xff0c;是一種功能強大的編程語言&#xff0c;特別擅長于文本處理、報告生成以及系統自動化管理任務。自1987年誕生以來&#xff0c;Perl憑借其靈活性、強大的內置功能庫和廣泛的社區支持&#xff0c;…

維護和管理LDAP之OpenDJ

目錄 基本介紹 服務專有名詞 安裝 命令行工具 密碼管理 重置管理員密碼 管理服務器進程 管理索引 如何搜索 管理索引 管理目錄數據 測試數據 導出數據 導入數據 LDIF文件數據查看和比較 數據存儲-Backends 配置連接 開啟 HTTP/HTTPS連接 使用 REST訪問 -open…

Spring AOP、Spring MVC工作原理、發展演變、常用注解

Spring AOP 概念 AOP全稱為Aspect Oriented Programming&#xff0c;表示面向切面編程。切面指的是將那些與業務無關&#xff0c;但業務模塊都需要使用的功能封裝起來的技術。 AOP基本術語 **連接點&#xff08;Joinpoint&#xff09;&#xff1a;**連接點就是被攔截到的程序執…

AQWA | 水動力分析 二階波浪力

&#x1f3c6;本文收錄于「Bug調優」專欄&#xff0c;主要記錄項目實戰過程中的Bug之前因后果及提供真實有效的解決方案&#xff0c;希望能夠助你一臂之力&#xff0c;幫你早日登頂實現財富自由&#x1f680;&#xff1b;同時&#xff0c;歡迎大家關注&&收藏&&…

Midjourney對圖片細微調整和下載保存

點擊v2是對第二圖片細微調整。 點擊u3對第3張圖片進行放大。 保存圖片: 對點擊u3放大的圖片&#xff0c;雙擊 , 右鍵保存圖片

停車場小程序的設計

管理員賬戶功能包括&#xff1a;系統首頁&#xff0c;個人中心&#xff0c;車主管理&#xff0c;商家管理&#xff0c;停車場信息管理&#xff0c;預約停車管理&#xff0c;商場收費管理&#xff0c;留言板管理 微信端賬號功能包括&#xff1a;系統首頁&#xff0c;停車場信息…

審核平臺前端新老倉庫遷移

背景 審核平臺接入50業務&#xff0c;提供在線審核及離線質檢、新人培訓等核心能力&#xff0c;同時提供數據報表、資源追蹤、知識庫等工具。隨著平臺的飛速發展&#xff0c;越來越多的新業務正在或即將接入審核平臺&#xff0c;日均頁面瀏覽量為百萬級別。如今審核平臺已是公司…

代碼提交錯分支了怎么辦?

你有么有遇到過正在開發的代碼&#xff0c;提交到生產環境的分支去&#xff0c;遇到這種情況怎么辦&#xff1f; 問題重現&#xff1a; 這段注釋// AAAAAAAAAAA 本來應該寫在dev分支的&#xff0c;現在提交并push到master分支了 現在第一步&#xff0c;撤回提交 第二步&…

第1章 認識 Vite

明白了&#xff0c;這里是第1章內容的詳細展開版本&#xff1a; 第1章 認識 Vite 1 . 什么是 Vite Vite 是一個由尤雨溪&#xff08;Vue.js 的創始人&#xff09;開發的前端構建工具&#xff0c;旨在提供極快的開發體驗。Vite 的名字來源于法語&#xff0c;意為“快速”&…

python繪制一維離散點

在Python中&#xff0c;繪制一維離散點通常意味著我們要在一條直線上標記出幾個特定的點。這可以通過多種庫來實現&#xff0c;但最常見和強大的庫之一是matplotlib。以下是一個詳細的代碼示例&#xff0c;它展示了如何使用matplotlib庫來繪制一維離散點&#xff0c;并且這個示…

C++語言常見錯誤分析匯總

在一個工程里出現兩個main函數時 3.obj : error LNK2005: _main already defined in file1.obj Debug/HELLO.exe : fatal error LNK1169: one or more multiply defined symbols found 這個就是說&#xff0c;你的main函數重定義了。你看看是不是你的工程里面&#xff0c;包…

MySQL的Geometry數據處理之WKB方案

MySQL的Geometry數據處理之WKT方案&#xff1a;https://blog.csdn.net/qq_42402854/article/details/140134357 MySQL的Geometry數據處理之WKT方案中&#xff0c;介紹WTK方案的優點&#xff0c;也感受到它的繁瑣和缺陷。比如&#xff1a; 需要借助 ST_GeomFromText和 ST_AsTex…

Spring @Cacheable緩存注解用法說明

注解Cacheable 是 Spring 框架中用于緩存數據的方法或類的注解。通過使用這個注解&#xff0c;你可以避免重復計算和重復獲取數據&#xff0c;從而提高應用程序的性能。 基本用法 引入依賴 確保在你的項目中引入了 Spring Cache 相關的依賴。如果你使用的是 Spring Boot&…

中英雙語介紹中國的城市:上海市(Shanghai)

中文版 上海市是中國最大的城市之一&#xff0c;也是全球重要的金融、貿易和航運中心。作為一座現代化的國際大都市&#xff0c;上海以其繁華的商業區、豐富的文化遺產和多樣化的經濟結構而聞名。以下是對上海市的詳細介紹&#xff0c;包括其地理位置、人口、經濟、教育、文化…

qt結合vs2022安裝

進入清華大學開源軟件&#xff1a; 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror 下載完成后&#xff0c;雙擊進行安裝&#xff1a; 進入郵箱進行驗證&#xff1a; 可能是因為網絡問題&#xff0c;無法安裝。 重新安裝5.12.12版本。 安裝后啟動失敗&#xff0c;重新…

后端接口設計考慮要點

1. 接口參數校驗 入參校驗&#xff1a;確保必要參數不為空&#xff0c;限制長度和格式&#xff08;例如郵箱格式&#xff09;。返回值校驗&#xff1a;確定返回值不為空&#xff0c;為空時返回與前端協商的默認值。 2. 接口擴展性 設計通用接口而非僅針對特定業務流程的接口…

橫截面交易策略:概念與示例

數量技術宅團隊在CSDN學院推出了量化投資系列課程 歡迎有興趣系統學習量化投資的同學&#xff0c;點擊下方鏈接報名&#xff1a; 量化投資速成營&#xff08;入門課程&#xff09; Python股票量化投資 Python期貨量化投資 Python數字貨幣量化投資 C語言CTP期貨交易系統開…

數據結構--單鏈表實現

歡迎光顧我的homepage 前言 鏈表和順序表都是線性表的一種&#xff0c;但是順序表在物理結構和邏輯結構上都是連續的&#xff0c;但鏈表在邏輯結構上是連續的&#xff0c;而在物理結構上不一定連續&#xff1b;來看以下圖片來認識鏈表與順序表的差別 這里以動態順序表…