@Test
void contextLoads() {
System.out.println(System.currentTimeMillis());//1716516228057 1716516228798
String 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对象,指向你的Shapefile
File file = new File("C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\tt\\地块1984.shp");
// 使用FileDataStoreFinder来查找和创建FileDataStore
FileDataStore store = null;
try {
store = FileDataStoreFinder.getDataStore(file);
// 获取FeatureSource
SimpleFeatureSource featureSource = store.getFeatureSource();
// 获取所有的Features
SimpleFeatureCollection featureCollection = featureSource.getFeatures();
// 使用SimpleFeatureIterator遍历features
List<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