开发者社区 > 云原生 > Serverless > 正文

这个函数里怎么获取到解压后的路径?

这个函数里怎么获取到解压后的路径?

提问30】.png

展开
收起
互问互答 2023-02-03 10:41:52 367 0
3 条回答
写回答
取消 提交回答
  • 如果想在函数中获取到解压后的路径,我给点思路:

    在Context中获取代码文件的解压路径,使用context.getFunctionRoot()来获取。

    可以将该路径与需要的解压文件的路径拼接,如String path = context.getFunctionRoot() + "/解压文件路径"。

    然后通过文件操作(例如File、Path、Scanner等)来读取该解压文件。

    2023-02-03 12:18:16
    赞同 展开评论 打赏
  • 您看看这里的代码呢

    回答12.png

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-02-03 12:11:32
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    话不多说,直接上代码,压缩和解压方法代码:

    package com.yuhuofei.utils;
    
    import java.io.*;
    import java.nio.charset.Charset;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    
    /**
     * @Description
     * @ClassName UnzipUtils
     * @Author lincloud
     * @Date 2023/2/3 10:03
     * @Version 1.0
     */
    public class UnzipUtils {
        /**
         * 解压zip压缩文件到指定目录
         *
         * @param zipPath zip压缩文件绝对路径
         * @param descDir 指定的解压目录
         */
        public static void unzipFile(String zipPath, String descDir) throws IOException {
            try {
                File zipFile = new File(zipPath);
                if (!zipFile.exists()) {
                    throw new IOException("要解压的压缩文件不存在");
                }
                File pathFile = new File(descDir);
                if (!pathFile.exists()) {
                    pathFile.mkdirs();
                }
                InputStream input = new FileInputStream(zipPath);
                unzipWithStream(input, descDir);
            } catch (Exception e) {
                throw new IOException(e);
            }
        }
    
        /**
         * 解压
         *
         * @param inputStream
         * @param descDir
         */
        public static void unzipWithStream(InputStream inputStream, String descDir) {
            if (!descDir.endsWith(File.separator)) {
                descDir = descDir + File.separator;
            }
            try (ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("GBK"))) {
                ZipEntry zipEntry;
                while ((zipEntry = zipInputStream.getNextEntry()) != null) {
                    String zipEntryNameStr = zipEntry.getName();
                    String zipEntryName = zipEntryNameStr;
                    if (zipEntryNameStr.contains("/")) {
                        String str1 = zipEntryNameStr.substring(0, zipEntryNameStr.indexOf("/"));
                        zipEntryName = zipEntryNameStr.substring(str1.length() + 1);
                    }
                    String outPath = (descDir + zipEntryName).replace("\\\\", "/");
                    File outFile = new File(outPath.substring(0, outPath.lastIndexOf('/')));
                    if (!outFile.exists()) {
                        outFile.mkdirs();
                    }
                    if (new File(outPath).isDirectory()) {
                        continue;
                    }
                    writeFile(outPath, zipInputStream);
                    zipInputStream.closeEntry();
                }
                System.out.println("======解压成功=======");
            } catch (IOException e) {
                System.out.println("压缩包处理异常,异常信息{}" + e);
            }
        }
    
        //将流写到文件中
        public static void writeFile(String filePath, ZipInputStream zipInputStream) {
            try (OutputStream outputStream = new FileOutputStream(filePath)) {
                byte[] bytes = new byte[4096];
                int len;
                while ((len = zipInputStream.read(bytes)) != -1) {
                    outputStream.write(bytes, 0, len);
                }
            } catch (IOException ex) {
                System.out.println("解压文件时,写出到文件出错");
            }
        }
    	
    	//测试方法
        public static void main(String[] args) throws IOException {
    
            String zipPath = "D:/test/测试文件.zip";
            String descDir = "D:/test/解压/";
    
            unzipFile(zipPath, descDir);
        }
    }
    
    2023-02-03 11:36:02
    赞同 展开评论 打赏
问答地址:

快速交付实现商业价值。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载