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