张洋洋
2025-01-10 a28eb2cb2abdd3f27075ca8468cf1a2bbf7de3cf
[add]h5读取改造
已修改3个文件
168 ■■■■■ 文件已修改
src/main/java/com/se/simu/controller/SimuController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/utils/ZarrUtils.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/utils/ZipUtils.java 102 ●●●●● 补丁 | 查看 | 原始文档 | 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,14 +2,17 @@
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
@@ -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();
    }
}