@Testvoid contextLoads() {System.out.println(System.currentTimeMillis());//1716516228057 1716516228798String zipFilePath = "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\新中心范围SHP导入模板.zip";String destDir = "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\tt";Boolean unzip = unzip(zipFilePath, destDir);if(!unzip) try {throw new Exception("解压失败");} catch (Exception e) {throw new RuntimeException(e);}// 创建一个File对象,指向你的ShapefileFile file = new File("C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\tt\\地块1984.shp");// 使用FileDataStoreFinder来查找和创建FileDataStoreFileDataStore store = null;try {store = FileDataStoreFinder.getDataStore(file);// 获取FeatureSourceSimpleFeatureSource featureSource = store.getFeatureSource();// 获取所有的FeaturesSimpleFeatureCollection featureCollection = featureSource.getFeatures();// 使用SimpleFeatureIterator遍历featuresList<SimpleFeature> featuresList = new ArrayList<>();SimpleFeatureIterator iterator = featureCollection.features();try {while (iterator.hasNext()) {SimpleFeature feature = iterator.next();// 获取几何信息System.out.println("Geometry: " + feature.getDefaultGeometry());// 获取属性信息System.out.println("Properties: ");feature.getProperties().forEach(prop -> {System.out.println(prop.getName().toString() + ": " + feature.getAttribute(prop.getName()));});}} finally {// 请记住关闭迭代器以释放资源iterator.close();}} catch (IOException e) {throw new RuntimeException(e);}System.out.println(System.currentTimeMillis());}public static Boolean unzip(String zipFilePath, String destDirectory) {File dir = new File(destDirectory);// 如果目标文件夹不存在,则创建if (!dir.exists()) {dir.mkdirs();}byte[] buffer = new byte[1024];try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath),Charset.forName("GBK"))) {ZipEntry zipEntry = zis.getNextEntry();while (zipEntry != null) {File newFile = newFile(dir, zipEntry);if (zipEntry.isDirectory()) {// 创建目录newFile.mkdirs();} else {// 创建父目录newFile.getParentFile().mkdirs();// 写入文件try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile))) {int len;while ((len = zis.read(buffer)) > 0) {bos.write(buffer, 0, len);}}}zipEntry = zis.getNextEntry();}zis.closeEntry();} catch (IOException e) {e.printStackTrace();}return true;}// 保护文件路径,防止ZipPathTraversal攻击private static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {File destFile = new File(destinationDir, zipEntry.getName());String destDirPath = destinationDir.getCanonicalPath();String destFilePath = destFile.getCanonicalPath();if (!destFilePath.startsWith(destDirPath + File.separator)) {throw new IOException("Entry is outside of the target directory: " + zipEntry.getName());}return destFile;}
注意
引入依赖不起作用,需要去geotools官网下载jar包导入项目
GeoTools
![](https://img-blog.csdnimg.cn/direct/cf07eb8b594b40b09b24e2bf8eb090cc.png