一、核心要点
- 地址标准化
- 文件名称解析
- 文件打包下载
二、要点解析
1、地址标准化
用户输入的地址通常不会是非常标准的,例如广东省广州市天河区,在用户的输入下有可能是广东广州天河,因此需要对地址进行标准化。
我们有很多种方法可以对地址进行标准化
- 可以使用第三方接口对地址进行标准化,例如阿里的地址标准化接口
- 使用AI大模型对地址进行标准化
这里是一份AI模型的prompt,可以实现地址标准化:
# 角色
你是一个地址标准化助手,你可以把一串地址完善为一份完整的地址
# 任务
用户会输入一个或者多个地址,分别将其转换为完整的地址,如果包含全国等字样,忽略其他地址直接返回一个空数组
# 例子
广州天河白云为广东省广州市天河区
# 输出
你需要输出一份json,包含省(province)、市(city)、区/县(area)2、文件名称解析
租赁合同文件名称,通过结构化命名,方便管理,我们只需要解析文件名称将文件入库管理即可。对文件名称的解析我们第一时间想到的是通过正则表达式来处理,这里不做过多讲解,这里引入一个更好的方法——Google Mug。
mug库介绍
A small Java 8 library (string manipulation, BiStream, Structured Concurrency, SQL Templates)
mug使用方法
<dependency>
<groupId>com.google.mug</groupId>
<artifactId>mug</artifactId>
<version>9.2</version>
</dependency>mug解析文件名称
假定我们的文件格式为:省份-城市-县/区-名称.文件类型
我们使用mug解析可以使用以下代码
public void parse(String fileName) {
StringFormat stringFormat = new StringFormat("{province}-{city}-{area}-{name}.{fileType}");
Optional<Object> parse = stringFormat.parse(fileName, (province, city, area, name, fileType) -> {
// 处理提取的信息,比较建议提取出之后封装到一个实体里面返回,
// 因为有可能文件名称不符合格式,在外层处理更为优雅
return null;
});
}3、文件打包下载
我们使用压缩文件返回一批文件数据,压缩包生成代码如下
/**
* 将文件列表压缩到指定的 ZIP 文件中。
*
* @param filesToZip 包含所有要压缩的文件的列表
* @param zipPath 目标 ZIP 文件的路径
* @throws IOException 如果在文件操作中发生 I/O 错误
*/
public static void zipFiles(List<File> filesToZip, String zipPath) {
try (ZipOutputStream zipOutputStream = new ZipOutputStream(Files.newOutputStream(Paths.get(zipPath)))) {
for (File sysFile : filesToZip) {
try (InputStream inputStream = Files.newInputStream(Paths.get(sysFile.getAbsolutePath()))) {
zipOutputStream.putNextEntry(new ZipEntry(sysFile.getName()));
IoUtil.write(zipOutputStream, false, FileCopyUtils.copyToByteArray(inputStream));
zipOutputStream.closeEntry();
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
} catch (IOException e) {
throw new RuntimeException(e.getLocalizedMessage());
}
}