获取全国所有省份,市区县的中文名和英文名

数据来源是一个在线的文本数据,里面包含了全国所有省份,
市区县的名字以及英文名(拼音),还有编码(应该是作者自己编的);
下载下来,放到本地,最好跟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条数据,我们国家竟然这么多个城市,区县。

获取全国所有省份,市区县的中文名和英文名相关推荐

  1. 全国各个省份市区县明细数据

    全国总共有23个省.5个自治区.4个直辖市.2个特别行政区. 此数据包含省.市.区.县数据,共2886个.--更新于2023年6月10日 费了不少时间,暂时应该没有比我更全的了~~~细致到区县了 包括 ...

  2. 修改C盘用户的中文名为英文名

    修改C盘用户的中文名为英文名 问题 解决方法 win10开启Administrator账户 1.管理员打开powershell或cmd 2.输入命令 3.注销系统,重新选择administrator ...

  3. Cdn英文的读音音标_根据中文名取英文名2019

    取英文名的方式有很多,根据中文名取英文名就是其中的一种,也是人们最喜用的一种技巧.但对于英文名字的赋予还是有很多讲究的,所以今天Elvis老师在这里分享最新根据中文名取英文名2019,希望能帮助到大家 ...

  4. python输入数字输出月份英文_编写一个程序,输入月份号,输出该月的中文名和英文名。...

    题目: 编写一个程序,输入月份号,输出该月的中文名和英文名. 例如,输入"3",则输出三月份,输出March,要求用指针数组处理. #include #include using ...

  5. 输出月份英文名java_编写一个程序,输入月份号,输出该月的中文名和英文名。...

    题目: 编写一个程序,输入月份号,输出该月的中文名和英文名. 例如,输入"3",则输出三月份,输出March,要求用指针数组处理. #include #include using ...

  6. win10win11修改C盘内用户名中文名为英文名

    win10win11修改C盘内用户名 1.[win]+[R],输入 net user administrator /active:yes 创建新用户 2点击开始 会有一个新用户 3点击用户 4进入新用 ...

  7. Windows 10家庭版系统用户名修改中文名为英文名

    Windows 10家庭版系统用户名修改中文名为英文名 打开注册表 修改注册表 找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVe ...

  8. win11系统中文名修改英文名,以及用户文件改名

    之前买电脑,新买的电脑,刚进系统时将系统名字设定为中文名,结果后面安装国外开发的软件时,bug频现,比如破解Vivado时,证书怎么弄都无效,一头雾水,刚开始不知道,疯狂挠头!!! 后来才知道是路径问 ...

  9. 网络定位-能定位到国家省份市区县街道

    代码改变世界 直接上代码 package com.example.baidu;import android.os.Bundle; import android.support.v7.app.AppCo ...

  10. Python文件重命名,中文名转英文名(含标点符号),改进版

    项目需要,很多中文文件名需要重命名,不然cv2会读不出来,如果全部改为数字,可能会丢失一些信息,所以需要中文转英文,网上有大神已经写好的脚本,根据工程实际进行了修改: 1.增加了去除标点符号的功能,例 ...

最新文章

  1. pandas 常用操作
  2. 《c语言深度剖析》读书笔记
  3. 服务器为什么进入pe找不到硬盘,进PE系统找不到硬盘怎么办?看电脑大神怎么做的!...
  4. (转贴)正则表达式学习心得体会(5)
  5. java系列:引用类型和基本类型
  6. ASP Webshell查***代码的小东东
  7. .NET Core SDK在Windows系统安装后出现Failed to load the hostfxr.dll等问题的解决方法
  8. PANIC: Could not open: AVD
  9. linux中screen 命令简单使用
  10. Java Hook简洁实用教程
  11. 计算机组成原理知识体系
  12. 网页中的一键加QQ群、唤起QQ群聊天窗口
  13. 海洋cms宝塔定时linux,海洋cms设置宝塔计划任务自动采集
  14. 李开复写给女孩子们的
  15. 微型计算机系统中存储容量最大的部件,微型计算机中存储容量最大的部件是什么?...
  16. 【keepass】利用keepassxc-browser浏览器扩展和keepassnatmsg插件实现密码自动填充(KeePassHttp-Connector/KeePassHttp)
  17. 思维课和少儿编程的区别
  18. 多列转单列表格的三种办法,你会几种?
  19. 以鼠标为中心对图片进行放大,此文是转载的,楼主看到不怪
  20. Python用log文件绘制损失、准确率曲线

热门文章

  1. 配置环境变量时Path单行显示问题
  2. Linux 查看日志命令tail的用法
  3. 白盒测试用例设计方法(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖、基本路径覆盖)
  4. 逻辑覆盖测试(五)条件组合覆盖
  5. 网络扫描 : nbtscan
  6. 工具 - 屏幕录像专家7.5注册机
  7. atx motherboard layout ATX主板规格尺寸图
  8. 【Multisim仿真】74LS193+74LS138流水灯
  9. vue部署到服务器 路由刷新找不到
  10. 使用 SetProcessWorkingSetSize 降低程序内存