使用spring boot将zip文件从应用程序资源文件夹复制到目标

Posted

技术标签:

【中文标题】使用spring boot将zip文件从应用程序资源文件夹复制到目标【英文标题】:Copying zip File from application Resource folder to target using spring boot 【发布时间】:2020-01-13 17:27:00 【问题描述】:

我在使用 Spring 启动应用程序 将 zip 文件(包含几个 RPM 文件)从 资源文件夹复制到目标文件夹 时遇到了问题。它确实在目标文件夹路径上创建了 zip 文件,但其中没有所有文件,并且创建的文件已损坏。请看附件

我浏览了几个链接,但似乎解决方案并不完美

    How to get files from resources folder. Spring Framework Read file from resources folder in Spring Boot

资源 zip 文件夹的快照 [

zip 文件夹内的文件快照

代码:

 ClassPathResource cpr = null;
            cpr = new ClassPathResource("/16.00/package.zip");
            try 
                InputStream data = cpr.getInputStream();
                File targetFile = new File("C:\\package.zip");
                java.nio.file.Files.copy(
                        data, 
                          targetFile.toPath(), 
                          StandardCopyOption.REPLACE_EXISTING);
                        IOUtils.closeQuietly(data);
                log.info("w"+data);
             catch (IOException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
            

上面的代码在目标文件夹上创建了一个 zip 文件,但它已损坏。当我尝试打开该文件时,它给了我以下错误

【问题讨论】:

【参考方案1】:

不知道为什么你认为你的代码会产生一个 Zip 文件,你只是将文件复制到一个文件中,这只会产生随机字节。您需要专门创建 Zip 文件和 ZipStreams。这是一个实用方法...

public static void addToZipFile(String zipFile, String[] filesToZip) throws Exception 

    // Create a buffer for reading the files
    byte[] buf = new byte[1024];

    // Create the ZIP file
    String outFilename = zipFile;
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));

    // Compress the files
    for (int i = 0; i < filesToZip.length; i++) 
    
        FileInputStream in = new FileInputStream(filesToZip[i]);

        // Add ZIP entry to output stream.
        out.putNextEntry(new ZipEntry(FilenameUtils.getName(filesToZip[i])));

        // Transfer bytes from the file to the ZIP file
        int len;
        while ((len = in.read(buf)) > 0) 
        
            out.write(buf, 0, len);
        

        // Complete the entry
        out.closeEntry();
        in.close();
    

    // Complete the ZIP file
    out.close();


【讨论】:

我的这部分已经在工作了。我可以使用上面的代码在 zip 中添加文件。问题是:如何从资源文件夹中读取 zip 文件并使用 spring boot 移动到任何目标文件夹?

以上是关于使用spring boot将zip文件从应用程序资源文件夹复制到目标的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot 静态资源自定义配置

Spring Boot tomcat-embed-core-9.0.21.jar:zip 文件为空

Spring Boot项目使用maven-assembly-plugin根据不同环境打包成tar.gz或者zip

Spring Boot 从命令行执行将文件添加到类路径

创建文本文件并添加到zip文件并下载spring boot而不保存在本地服务器中

译:从 JSON 文件加载 Spring Boot 属性