From a28eb2cb2abdd3f27075ca8468cf1a2bbf7de3cf Mon Sep 17 00:00:00 2001
From: 张洋洋 <10611411+yang-yang-z@user.noreply.gitee.com>
Date: 星期五, 10 一月 2025 15:50:52 +0800
Subject: [PATCH] [add]h5读取改造

---
 src/main/java/com/se/simu/utils/ZarrUtils.java           |   54 ------------------
 src/main/java/com/se/simu/utils/ZipUtils.java            |  104 ++++++++++++++++++++++++++++++++++
 src/main/java/com/se/simu/controller/SimuController.java |   12 +++
 3 files changed, 113 insertions(+), 57 deletions(-)

diff --git a/src/main/java/com/se/simu/controller/SimuController.java b/src/main/java/com/se/simu/controller/SimuController.java
index f8d151d..350bc58 100644
--- a/src/main/java/com/se/simu/controller/SimuController.java
+++ b/src/main/java/com/se/simu/controller/SimuController.java
@@ -13,6 +13,7 @@
 import com.se.simu.utils.CsvToSQLiteUtils;
 import com.se.simu.utils.ShpToolUtils;
 import com.se.simu.utils.ZarrUtils;
+import com.se.simu.utils.ZipUtils;
 import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -20,6 +21,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.io.File;
 import java.io.IOException;
 import java.util.*;
 
@@ -343,12 +345,20 @@
     @GetMapping(value = "/testZarr", produces = "application/json; charset=UTF-8")
     public R<Boolean> testZarr(@RequestParam("name") String tableName) throws IOException {
         List<String> list = CsvToSQLiteUtils.getNameList(tableName);
-        String basePath="D:\\鍩庡競鍐呮稘\\sem\\闆ㄩ噺绔欑偣鏁版嵁\\闄嶉洦閲弞arr\\";
+        String basePath="D:\\鍩庡競鍐呮稘\\sem\\闆ㄩ噺绔欑偣鏁版嵁\\"+tableName+"\\rainfall\\";
         for (String src : list
         ) {
+            File directories = new File(basePath);
+            if (!directories.exists()) {
+                directories.mkdirs();
+                System.out.println("Directories created successfully.");
+            } else {
+                System.out.println("Directories already exist.");
+            }
             List<StationRainVo> stationRainVos = CsvToSQLiteUtils.getList(tableName, src);
             ZarrUtils.saveZarrRainfall(basePath+src,stationRainVos);
             ZarrUtils.saveZarrTime(basePath+src,stationRainVos);
+            ZipUtils.toZarr(basePath+src,basePath+src+".zip");
             System.out.println(src+"鐨剒arr鏁版嵁鐢熸垚=====================");
         }
         return success(true);
diff --git a/src/main/java/com/se/simu/utils/ZarrUtils.java b/src/main/java/com/se/simu/utils/ZarrUtils.java
index 598ef34..b060b76 100644
--- a/src/main/java/com/se/simu/utils/ZarrUtils.java
+++ b/src/main/java/com/se/simu/utils/ZarrUtils.java
@@ -5,60 +5,12 @@
 import com.bc.zarr.ZarrArray;
 import com.bc.zarr.ZarrGroup;
 import com.se.simu.domain.vo.StationRainVo;
-import org.apache.commons.csv.CSVFormat;
-import org.apache.commons.csv.CSVParser;
-import org.apache.commons.csv.CSVRecord;
-
-import java.io.FileReader;
-import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.List;
 
 public class ZarrUtils {
-//    public static void main(String[] args) throws Exception {
-//        // 杈撳叆 CSV 鏂囦欢鐨勮矾寰�
-//        String csvFilePath = "D:\\鍩庡競鍐呮稘\\sem\\闆ㄩ噺绔欑偣鏁版嵁\\闆ㄩ噺绔欏寘鍚潗鏍�.csv";
-//        // 杈撳嚭 Zarr 鏂囦欢鐨勮矾寰�
-//        String zarrFilePath = "D:\\鍩庡競鍐呮稘\\sem\\闆ㄩ噺绔欑偣鏁版嵁\\澶у簽鏉�";
-//        try (CSVParser csvParser = new CSVParser(new FileReader(csvFilePath), CSVFormat.DEFAULT.withFirstRecordAsHeader())) {
-//            // 鑾峰彇 CSV 鍒楁暟
-//            int numColumns = csvParser.getHeaderMap().size();
-//            // 璁$畻 CSV 琛屾暟
-//            int numRows = 0;
-//            for (CSVRecord record : csvParser) {
-//                numRows++;
-//            }
-//            // 閲嶆柊鍒濆鍖� CSV 瑙f瀽鍣紝鍥犱负涔嬪墠鐨勯亶鍘嗗凡缁忚�楀敖浜嗚凯浠e櫒
-//            csvParser.close();
-//            CSVParser csvRecords = new CSVParser(new FileReader(csvFilePath), CSVFormat.DEFAULT.withFirstRecordAsHeader());
-//            // 鍒涘缓 Zarr 缁�
-//            Path zarrPath = Paths.get(zarrFilePath);
-//            ZarrGroup zarrGroup = ZarrGroup.create(zarrPath);
-//            // 瀹氫箟 Zarr 鏁扮粍鐨勭淮搴�
-//            int[] shape = {numRows, numColumns};
-//            // 瀹氫箟鍒嗗潡澶у皬
-//            int[] chunks = {1440};
-//            // 鍒涘缓 Zarr 鏁扮粍
-//            ArrayParams params = new ArrayParams();
-//            params.shape(chunks);
-//            params.chunks(chunks);
-//            params.dataType(DataType.f4);
-//            ZarrArray zarrArray = zarrGroup.createArray("rainfall", params);
-//            int rowIndex = 0;
-//            for (CSVRecord record : csvRecords) {
-//                double value = Double.parseDouble(record.get(1));
-//                zarrArray.write(value);
-//                rowIndex++;
-//            }
-//            // 鍏抽棴 Zarr 缁�
-//            //zarrGroup.close();
-//        } catch (IOException e) {
-//            e.printStackTrace();
-//        }
-//    }
 
     public static void saveZarrRainfall(String path, List<StationRainVo> stationRainVos){
         try {
@@ -125,10 +77,4 @@
         }
     }
 
-    public static void main(String[] args) throws Exception{
-        System.out.println("2023/7/31 6:30");
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
-        Date date = sdf.parse("2023/7/31 6:30");
-        System.out.println(date.getTime());
-    }
 }
diff --git a/src/main/java/com/se/simu/utils/ZipUtils.java b/src/main/java/com/se/simu/utils/ZipUtils.java
index 5045b6c..a480835 100644
--- a/src/main/java/com/se/simu/utils/ZipUtils.java
+++ b/src/main/java/com/se/simu/utils/ZipUtils.java
@@ -2,21 +2,24 @@
 
 import cn.hutool.core.util.CharsetUtil;
 import cn.hutool.core.util.ZipUtil;
-import org.apache.commons.io.FileUtils;
 
 import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
 
 /**
  * zip
  */
 public class ZipUtils {
     // 瑙e帇zip鏍煎紡
-    public static void unzip(String zipFilePath, String destDir){
+    public static void unzip(String zipFilePath, String destDir) {
         //鎵�鏈夌殑鏂囦欢璺緞
         List<String> filePaths = new ArrayList<>();
 
@@ -68,4 +71,101 @@
             }
         }
     }
+
+    public static void zip(String sourceDirPath, String zipFilePath) throws IOException {
+        Path sourceDir = Paths.get(sourceDirPath);
+        try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
+            Files.walk(sourceDir).forEach(path -> {
+                try {
+                    String zipEntryName = sourceDir.relativize(path).toString();
+                    if (Files.isDirectory(path)) {
+                        // 濡傛灉鏄洰褰曪紝鍒涘缓涓�涓┖鐨刏IP鐩綍
+                        if (!zipEntryName.isEmpty()) {
+                            zipOutputStream.putNextEntry(new ZipEntry(zipEntryName + "/"));
+                        }
+                    } else {
+                        // 濡傛灉鏄枃浠讹紝鍐欏叆ZIP鏂囦欢
+                        zipOutputStream.putNextEntry(new ZipEntry(zipEntryName));
+                        Files.copy(path, zipOutputStream);
+                    }
+                    zipOutputStream.closeEntry();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            });
+        }
+    }
+
+    public static void toZarr(String sourceDir, String zipFile) {
+        try {
+            zip(sourceDir, zipFile);
+            System.out.println("鏂囦欢澶瑰凡鎴愬姛鍘嬬缉涓�: " + zipFile);
+            updateFileSuffix(zipFile, "zarr");
+            deleteFile(sourceDir);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void updateFileSuffix(String filePath, String newSuffix) {
+        // 鍒涘缓File瀵硅薄
+        File file = new File(filePath);
+
+        // 妫�鏌ユ枃浠舵槸鍚﹀瓨鍦�
+        if (file.exists()) {
+            // 鑾峰彇鏂囦欢鍚嶅拰鍚庣紑
+            String fileName = file.getName();
+            int dotIndex = fileName.lastIndexOf('.');
+            if (dotIndex > 0) {
+                // 鍒嗙鏂囦欢鍚嶅拰鍚庣紑
+                String name = fileName.substring(0, dotIndex);
+                // 缁勫悎鏂扮殑鏂囦欢鍚�
+                String newFileName = name + '.' + newSuffix;
+
+                // 閲嶅懡鍚嶆枃浠�
+                File newFile = new File(file.getParent(), newFileName);
+                if (file.renameTo(newFile)) {
+                    System.out.println("鏂囦欢閲嶅懡鍚嶆垚鍔燂細" + newFile.getName());
+                } else {
+                    System.out.println("鏂囦欢閲嶅懡鍚嶅け璐ャ��");
+                }
+            } else {
+                System.out.println("鏂囦欢娌℃湁鍚庣紑銆�");
+            }
+        } else {
+            System.out.println("鏂囦欢涓嶅瓨鍦ㄣ��");
+        }
+    }
+
+    public static void deleteFile(String path) {
+        // 鐩爣鏂囦欢澶圭殑璺緞
+        File directory = new File(path);
+        // 妫�鏌ユ枃浠跺す鏄惁瀛樺湪
+        if (!directory.exists()) {
+            System.out.println("鏂囦欢澶逛笉瀛樺湪锛�");
+            return; // 鏂囦欢澶逛笉瀛樺湪锛岄��鍑虹▼搴�
+        }
+        // 璋冪敤deleteDirectory鏂规硶鍒犻櫎鏂囦欢澶瑰強鍏跺唴瀹�
+        if (deleteDirectory(directory)) {
+            System.out.println("鏂囦欢澶瑰凡鎴愬姛鍒犻櫎锛�");
+        } else {
+            System.out.println("鏂囦欢澶瑰垹闄ゅけ璐ワ紒");
+        }
+    }
+
+    // 閫掑綊鍒犻櫎鏂囦欢澶瑰強鍏跺唴瀹圭殑鏂规硶
+    public static boolean deleteDirectory(File directory) {
+        if (directory.isDirectory()) {
+            File[] files = directory.listFiles();
+            if (files != null) {
+                for (File file : files) {
+                    // 閫掑綊澶勭悊
+                    deleteDirectory(file);
+                }
+            }
+        }
+        // 鍒犻櫎褰撳墠鏂囦欢鎴栨枃浠跺す
+        return directory.delete();
+    }
+
 }

--
Gitblit v1.9.3