最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java處理壓縮文件的步驟詳解

 更新時(shí)間:2024年10月29日 11:59:21   作者:南國以南i  
在Java編程環(huán)境中,處理zip壓縮文件是一項(xiàng)常見的任務(wù),特別是在數(shù)據(jù)傳輸、備份或者打包應(yīng)用程序時(shí),本文將詳細(xì)講解Java處理壓縮文件的步驟,并有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下

背景

在項(xiàng)目出現(xiàn)上傳文件,其中文件包含壓縮包,并對(duì)壓縮包的內(nèi)容進(jìn)行解析保存。

第一步:編寫代碼

1.1 請(qǐng)求層

我們用倒敘的方式來寫。先寫 ZipController

	@Autowired
    private ZipService zipService;

    /**
     * 上傳二維碼文件
     * @param qrCodeFile 二維碼文件
     * @return 返回上傳的結(jié)果
     */
    @ApiOperation(value = "上傳二維碼文件")
    @PostMapping("/uploadQrCodeFile")
    public Result uploadQrCodeFile(@RequestParam("file") MultipartFile qrCodeFile) throws Exception {
        zipService.uploadQrCodeFile(qrCodeFile);
        return Result.sendSuccess("上傳成功");
    }

1.2 業(yè)務(wù)處理層

接著就是寫 Service

@Service
public class ZipService {


    private static final Logger logger= LoggerFactory.getLogger(ZipService.class);


    public void uploadQrCodeFile(MultipartFile multipartFile)throws Exception {
        if (multipartFile.getSize() == 0
                || multipartFile.getOriginalFilename() == null
                || (multipartFile.getOriginalFilename() != null
                && !multipartFile.getOriginalFilename().contains("."))) {
            ExceptionCast.cast(Result.sendFailure("文件格式不正確或文件為空!"));
        }
        // 1.先下載文件到本地
        String originalFilename = multipartFile.getOriginalFilename();
        String destPath = System.getProperty("user.dir") + File.separator + "qrCodeFile";
        FileUtil.writeFromStream(
                multipartFile.getInputStream(), new File(destPath + File.separator + originalFilename));

        // 2.解壓文件
        unzipAndSaveFileInfo(originalFilename, destPath);
        // 3.備份壓縮文件,刪除解壓的目錄
        FileUtils.copyFile(
                new File(destPath + File.separator + originalFilename),
                new File(destPath + File.separator + "backup" + File.separator + originalFilename));
        // 刪除原來的上傳的臨時(shí)壓縮包
        FileUtils.deleteQuietly(new File(destPath + File.separator + originalFilename));
        logger.info("文件上傳成功,文件名為:{}", originalFilename);


    }

    /**
     * 解壓和保存文件信息
     *
     * @param originalFilename 源文件名稱
     * @param destPath         目標(biāo)路徑
     */
    private void unzipAndSaveFileInfo(String originalFilename, String destPath) throws IOException {
        if (StringUtils.isEmpty(originalFilename) || !originalFilename.contains(".")) {
            ExceptionCast.cast(Result.sendFailure("文件名錯(cuò)誤!"));
        }
        // 壓縮
        ZipUtil.unzip(
                new File(destPath + File.separator + originalFilename),
                new File(destPath),
                Charset.forName("GBK"));
        // 遍歷文件信息
        String fileName = originalFilename.substring(0, originalFilename.lastIndexOf("."));
        File[] files = FileUtil.ls(destPath + File.separator + fileName);
        if (files.length == 0) {
            ExceptionCast.cast(Result.sendFailure("上傳文件為空!"));
        }
        String targetPath = destPath + File.separator + "images";
        for (File file : files) {
            // 復(fù)制文件到指定目錄
            String saveFileName =
                    System.currentTimeMillis() + new SecureRandom().nextInt(100) + file.getName();
            FileUtils.copyFile(file, new File(targetPath + File.separator + saveFileName));
            logger.info("文件名稱:"+file.getName());
            logger.info("文件所在目錄地址:"+saveFileName);
            logger.info("文件所在目錄地址:"+targetPath + File.separator + saveFileName);
        }
    }
}

1.3 新增配置

因spring boot有默認(rèn)上傳文件大小限制,故需配置文件大小。在 application.properties 中添加 upload 的配置

#### upload begin  ###
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-request-size=10MB
spring.servlet.multipart.max-file-size=10MB
#### upload end  ###

第二步:解壓縮處理

2.1 引入依賴

引入 Apache 解壓 / 壓縮 工具類處理,解壓 tar.gz 文件

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.20</version>
</dependency>

2.2 解壓縮工具類

  • 將 tar.gz 轉(zhuǎn)換為 tar
  • 解壓 tar
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import org.apache.commons.compress.utils.IOUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;


       // tar.gz 文件路徑
        String sourcePath = "D:\\daleyzou.tar.gz";
        // 要解壓到的目錄
        String extractPath = "D:\\test\\daleyzou";
        File sourceFile = new File(sourcePath);
        // decompressing *.tar.gz files to tar
        TarArchiveInputStream fin = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(sourceFile)));
        File extraceFolder = new File(extractPath);
        TarArchiveEntry entry;
        // 將 tar 文件解壓到 extractPath 目錄下
        while ((entry = fin.getNextTarEntry()) != null) {
            if (entry.isDirectory()) {
                continue;
            }
            File curfile = new File(extraceFolder, entry.getName());
            File parent = curfile.getParentFile();
            if (!parent.exists()) {
                parent.mkdirs();
            }
            // 將文件寫出到解壓的目錄
            IOUtils.copy(fin, new FileOutputStream(curfile));
        }

總結(jié)

到此這篇關(guān)于Java處理壓縮文件的步驟詳解的文章就介紹到這了,更多相關(guān)Java處理壓縮文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 判斷數(shù)組是否相等的方法示例

    Java 判斷數(shù)組是否相等的方法示例

    這篇文章主要介紹了Java 判斷數(shù)組是否相等的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • SpringBoot注解@EnableScheduling定時(shí)任務(wù)詳細(xì)解析

    SpringBoot注解@EnableScheduling定時(shí)任務(wù)詳細(xì)解析

    這篇文章主要介紹了SpringBoot注解@EnableScheduling定時(shí)任務(wù)詳細(xì)解析,@EnableScheduling 開啟對(duì)定時(shí)任務(wù)的支持,啟動(dòng)類里面使用@EnableScheduling 注解開啟功能,自動(dòng)掃描,需要的朋友可以參考下
    2024-01-01
  • SpringBoot中開啟GZIP壓縮的方式

    SpringBoot中開啟GZIP壓縮的方式

    這篇文章主要介紹了SpringBoot中開啟GZIP壓縮的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Spring?Boot?消息隊(duì)列與異步處理的應(yīng)用小結(jié)

    Spring?Boot?消息隊(duì)列與異步處理的應(yīng)用小結(jié)

    這篇文章給大家介紹了Spring?Boot?消息隊(duì)列與異步處理的應(yīng)用小結(jié),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-04-04
  • Java 中比較兩個(gè) long 類型變量大小的方法(實(shí)例詳解)

    Java 中比較兩個(gè) long 類型變量大小的方法(實(shí)例詳解)

    比較兩個(gè)long類型變量的大小時(shí),由于是基本數(shù)據(jù)類型,直接使用Java 內(nèi)置的關(guān)系運(yùn)算符即可,這些運(yùn)算符比較的是變量的實(shí)際值,而非內(nèi)存地址,下面給大家介紹Java中比較兩個(gè)long類型變量大小的方法,感興趣的朋友一起看看吧
    2025-06-06
  • SpringBoot 啟動(dòng)時(shí)自動(dòng)執(zhí)行代碼的幾種方式講解

    SpringBoot 啟動(dòng)時(shí)自動(dòng)執(zhí)行代碼的幾種方式講解

    本文主要介紹了SpringBoot 啟動(dòng)時(shí)自動(dòng)執(zhí)行代碼的幾種方式,包括static代碼塊、構(gòu)造方法、@PostConstruct注解、ApplicationRunner和CommandLineRunner接口,感興趣的可以了解一下
    2025-12-12
  • java異常處理攔截器詳情

    java異常處理攔截器詳情

    這篇文章主要介紹了java異常處理攔截器,使用異常處理攔截器,可以不用寫那么多try…catch…,下面就來學(xué)習(xí)關(guān)于java異常處理攔截器的詳情內(nèi)容吧,需要的朋友可以參考一下
    2021-10-10
  • eclipse下整合springboot和mybatis的方法步驟

    eclipse下整合springboot和mybatis的方法步驟

    這篇文章主要介紹了eclipse下整合springboot和mybatis的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • 淺談?dòng)胘ava實(shí)現(xiàn)事件驅(qū)動(dòng)機(jī)制

    淺談?dòng)胘ava實(shí)現(xiàn)事件驅(qū)動(dòng)機(jī)制

    這篇文章主要介紹了淺談?dòng)胘ava實(shí)現(xiàn)事件驅(qū)動(dòng)機(jī)制,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • 基于Java反射技術(shù)實(shí)現(xiàn)簡單IOC容器

    基于Java反射技術(shù)實(shí)現(xiàn)簡單IOC容器

    這篇文章主要介紹了基于Java反射技術(shù)實(shí)現(xiàn)簡單IOC容器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論

莎车县| 板桥市| 游戏| 通江县| 上犹县| 宁南县| 陕西省| 长治县| 禹城市| 南昌市| 自治县| 伽师县| 盈江县| 四会市| 惠东县| 额济纳旗| 竹山县| 鹤岗市| 黑水县| 天长市| 清远市| 山东| 盐亭县| 娄底市| 静安区| 和静县| 东辽县| 定陶县| 阜康市| 五大连池市| 松原市| 宜黄县| 甘洛县| 共和县| 万安县| 城口县| 灵寿县| 安平县| 凤台县| 逊克县| 宿州市|