获取全国所有省份,市区县的中文名和英文名
获取全国所有省份,市区县的中文名和英文名
数据来源是一个在线的文本数据,里面包含了全国所有省份,
市区县的名字以及英文名(拼音),还有编码(应该是作者自己编的);
下载下来,放到本地,最好跟java文件放一起这样好找
在线的文本数据:
https://wuliu.taobao.com/user/output_address.do?range=county
一. 将文本解析
格式类似于JSON,将大括号两边的内容剔除掉,
再将单引号全部替换成双引号,就是JSON格式的字符串了
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;/*** create by fzg* 2022/11/21 10:41*/@Slf4j
public class ProvinceCityAndCounty {public static void main(String[] args) {// txt文本文件的位置String txtUrl = "E:\\学习\\项目\\vue-vant-app\\myBlog\\myCaveolae_server\\src\\main\\java\\com\\fzg\\common\\demo\\country\\province.txt";ArrayList<HashMap<String, Object>> chineseAllProvinces = getChineseAllProvincesAndCityCounty(txtUrl);log.info(JSON.toJSONString(chineseAllProvinces));}/*** 获取中国所有省份中文名和英文名* @param txtUrl* @return*/public static ArrayList<HashMap<String,Object>> getChineseAllProvincesAndCityCounty(String txtUrl){// 根据文件url读取文件内容File file = new File(txtUrl);BufferedReader bf;String data = "";try {bf = new BufferedReader(new FileReader(file));data = bf.readLine();} catch (FileNotFoundException e) {e.printStackTrace();log.info("文件未找到");} catch (IOException e) {e.printStackTrace();log.info("文件读取失败");}if (data.equals("")){log.info("文件内容为空");return null;}else {log.info("文件读取成功");log.info(data);return convertContent(data);}}/*** 处理文件内容* @param data* @return*/public static ArrayList<HashMap<String,Object>> convertContent(String data){// 文件内容,把大括号前面后面都剔除 var name = { }; 我们要的是大括号中间的部分String res = data.substring(data.indexOf("{"), data.lastIndexOf("}") + 1);// 将文件内容里的单引号全部替换成双引号res = res.replace("'","\"");log.info(res);// 现在res 已经是一个标准的JSON字符串了,把他解析成对象就行了JSONObject jsonObject = new JSONObject(JSON.parseObject(res));// log.info(jsonObject.toString());// 将JSONObject转为listMap<String, Object> innerMap = jsonObject.getInnerMap();Set<Map.Entry<String, Object>> entries = innerMap.entrySet();ArrayList<HashMap<String, Object>> list = new ArrayList<>();for (Map.Entry<String, Object> entry : entries) {HashMap<String, Object> map = new HashMap<>();JSONArray objects = JSON.parseArray(entry.getValue().toString());map.put("code",entry.getKey());map.put("parentCode",objects.get(1));map.put("chineseName",objects.get(0));map.put("englishName",objects.get(2));list.add(map);}log.info(list.toString());if (list.size() > 0){log.info("解析成功");}else {log.info("解析失败");}return list;}}
二. 配置
解析成功之后返回了一个list
用springboot连接MySQL,配置文件(application.yaml)
server:port: 端口号spring:datasource:url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTCusername: 用户名password: 密码driver-class-name: com.mysql.cj.jdbc.Drivermybatis-plus:mapper-locations: classpath:mapper/*.xmlconfiguration:#打印SQl日志log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true
pom.xml里导入mybatis-plus依赖以及要用到的其他依赖
<!-- 连接MySQL --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<!-- springboot web -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 连接MySQL --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
<!-- 实体类,打印日志等 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
<!-- JSON数据转换 -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.78</version>
</dependency>
<!-- mybatis-plus -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-extension</artifactId><version>3.4.3.4</version>
</dependency>
<!-- mybatis-plus代码生成 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version>
</dependency>
<!-- mybatis-plus -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version>
</dependency>
<!-- mybatis-plus代码生成时,需要用到freemarker模板 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
然后代码生成器根据表生成对应的controller,service,mapper,entity等类
关于框架怎么生成请查看我的博客:
https://blog.csdn.net/weixin_50794535/article/details/127965546?spm=1001.2014.3001.5501
最后在service实现类里添加代码插入数据到MySQL
三. 实现
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fzg.common.demo.country.ProvinceCityAndCounty;
import com.fzg.common.enums.ResponseWrapper;
import com.fzg.entity.ChinaProvinceCity;
import com.fzg.mapper.ChinaProvinceCityMapper;
import com.fzg.service.ChinaProvinceCityService;
import org.springframework.stereotype.Service;import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;/*** <p>* 服务实现类* </p>** @author fzg* @since 2022-11-21*/
@Service
public class ChinaProvinceCityServiceImpl extends ServiceImpl<ChinaProvinceCityMapper, ChinaProvinceCity> implements ChinaProvinceCityService {/*** 将全国所有省份,市区,县数据导入到MySQL数据库中** @return*/@Overridepublic ResponseWrapper importProvinceCityCounty() {// 开始计时Timestamp startTime = new Timestamp(System.currentTimeMillis());// 调用这个类的静态方法把文本内容处理成 数据listArrayList<HashMap<String, Object>> list = ProvinceCityAndCounty.getChineseAllProvincesAndCityCounty("E:\\学习\\项目\\vue-vant-app\\myBlog\\myCaveolae_server\\src\\main\\java\\com\\fzg\\common\\demo\\country\\provinceCityAndCounty.txt");String res = "";if (list != null){int count = 0;for (HashMap<String, Object> map : list) {boolean save = this.save(new ChinaProvinceCity() {{setChineseName(map.get("chineseName").toString());setEnglishName(map.get("englishName").toString());setCode(map.get("code").toString());setParentCode(map.get("parentCode").toString());}});if (save){count++;}}res = "新增了" + count + "数据";}else {res = "数据为空";}Timestamp endTime = new Timestamp(System.currentTimeMillis());// 用时long second = (endTime.getTime() - startTime.getTime()) / 1000;String result = "用时" + second + "秒; ";return ResponseWrapper.markCustomSuccess(result + res);}
}
获取数据list,调用了另一个类的静态方法, 上面已经给出了
表结构:根据表结构(表名和字段)生成代码框架
最后在controller层调用service实现类方法去postman测试
或者直接controller里使用get请求,直接在浏览器输入网址就可
四. 结果
select count(1)
from china_province_city;
数据库表数据:4115条数据,我们国家竟然这么多个城市,区县。
获取全国所有省份,市区县的中文名和英文名相关推荐
- 全国各个省份市区县明细数据
全国总共有23个省.5个自治区.4个直辖市.2个特别行政区. 此数据包含省.市.区.县数据,共2886个.--更新于2023年6月10日 费了不少时间,暂时应该没有比我更全的了~~~细致到区县了 包括 ...
- 修改C盘用户的中文名为英文名
修改C盘用户的中文名为英文名 问题 解决方法 win10开启Administrator账户 1.管理员打开powershell或cmd 2.输入命令 3.注销系统,重新选择administrator ...
- Cdn英文的读音音标_根据中文名取英文名2019
取英文名的方式有很多,根据中文名取英文名就是其中的一种,也是人们最喜用的一种技巧.但对于英文名字的赋予还是有很多讲究的,所以今天Elvis老师在这里分享最新根据中文名取英文名2019,希望能帮助到大家 ...
- python输入数字输出月份英文_编写一个程序,输入月份号,输出该月的中文名和英文名。...
题目: 编写一个程序,输入月份号,输出该月的中文名和英文名. 例如,输入"3",则输出三月份,输出March,要求用指针数组处理. #include #include using ...
- 输出月份英文名java_编写一个程序,输入月份号,输出该月的中文名和英文名。...
题目: 编写一个程序,输入月份号,输出该月的中文名和英文名. 例如,输入"3",则输出三月份,输出March,要求用指针数组处理. #include #include using ...
- win10win11修改C盘内用户名中文名为英文名
win10win11修改C盘内用户名 1.[win]+[R],输入 net user administrator /active:yes 创建新用户 2点击开始 会有一个新用户 3点击用户 4进入新用 ...
- Windows 10家庭版系统用户名修改中文名为英文名
Windows 10家庭版系统用户名修改中文名为英文名 打开注册表 修改注册表 找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVe ...
- win11系统中文名修改英文名,以及用户文件改名
之前买电脑,新买的电脑,刚进系统时将系统名字设定为中文名,结果后面安装国外开发的软件时,bug频现,比如破解Vivado时,证书怎么弄都无效,一头雾水,刚开始不知道,疯狂挠头!!! 后来才知道是路径问 ...
- 网络定位-能定位到国家省份市区县街道
代码改变世界 直接上代码 package com.example.baidu;import android.os.Bundle; import android.support.v7.app.AppCo ...
- Python文件重命名,中文名转英文名(含标点符号),改进版
项目需要,很多中文文件名需要重命名,不然cv2会读不出来,如果全部改为数字,可能会丢失一些信息,所以需要中文转英文,网上有大神已经写好的脚本,根据工程实际进行了修改: 1.增加了去除标点符号的功能,例 ...
最新文章
- pandas 常用操作
- 《c语言深度剖析》读书笔记
- 服务器为什么进入pe找不到硬盘,进PE系统找不到硬盘怎么办?看电脑大神怎么做的!...
- (转贴)正则表达式学习心得体会(5)
- java系列:引用类型和基本类型
- ASP Webshell查***代码的小东东
- .NET Core SDK在Windows系统安装后出现Failed to load the hostfxr.dll等问题的解决方法
- PANIC: Could not open: AVD
- linux中screen 命令简单使用
- Java Hook简洁实用教程
- 计算机组成原理知识体系
- 网页中的一键加QQ群、唤起QQ群聊天窗口
- 海洋cms宝塔定时linux,海洋cms设置宝塔计划任务自动采集
- 李开复写给女孩子们的
- 微型计算机系统中存储容量最大的部件,微型计算机中存储容量最大的部件是什么?...
- 【keepass】利用keepassxc-browser浏览器扩展和keepassnatmsg插件实现密码自动填充(KeePassHttp-Connector/KeePassHttp)
- 思维课和少儿编程的区别
- 多列转单列表格的三种办法,你会几种?
- 以鼠标为中心对图片进行放大,此文是转载的,楼主看到不怪
- Python用log文件绘制损失、准确率曲线