src/main/java/com/se/simu/controller/SimuController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/utils/ZarrUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/utils/ZipUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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\\雨量站点数据\\降雨量zarr\\"; 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+"的zarr数据生成====================="); } return success(true); 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 解析器,因为之前的遍历已经耗尽了迭代器 // 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()); } } 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 { // 解压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)) { // 如果是目录,创建一个空的ZIP目录 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(); } }