热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

获取全国所有省份,市区县的中文名和英文名数据来源是一个在线的文本数据,里面包含了全国所有省份,市区县的名字以及英文名(拼音),还有编码(应该是作者自己编的);下载下来,放到本地,最

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


数据来源是一个在线的文本数据,里面包含了全国所有省份,

市区县的名字以及英文名(拼音),还有编码(应该是作者自己编的);

下载下来,放到本地,最好跟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> chineseAllProvinces = getChineseAllProvincesAndCityCounty(txtUrl);
log.info(JSON.toJSONString(chineseAllProvinces));
}
/**
* 获取中国所有省份中文名和英文名
* @param txtUrl
* @return
*/
public static ArrayList> 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> 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转为list
Map innerMap = jsonObject.getInnerMap();
Set> entries = innerMap.entrySet();
ArrayList> list = new ArrayList<>();
for (Map.Entry entry : entries) {
HashMap 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=UTC
username: 用户名
password: 密码
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
configuration:
#打印SQl日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true

pom.xml里导入mybatis-plus依赖以及要用到的其他依赖




org.springframework.boot
spring-boot-starter-data-jdbc


org.springframework.boot
spring-boot-starter-web


mysql
mysql-connector-java
runtime


org.projectlombok
lombok
true


com.alibaba
fastjson
1.2.78


com.baomidou
mybatis-plus-extension
3.4.3.4


com.baomidou
mybatis-plus-generator
3.4.1


com.baomidou
mybatis-plus-boot-starter
3.4.0


org.springframework.boot
spring-boot-starter-freemarker


然后代码生成器根据表生成对应的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;
/**
*


* 服务实现类
*


*
* @author fzg
* @since 2022-11-21
*/
@Service
public class ChinaProvinceCityServiceImpl extends ServiceImpl implements ChinaProvinceCityService {
/**
* 将全国所有省份,市区,县数据导入到MySQL数据库中
*
* @return
*/
@Override
public ResponseWrapper importProvinceCityCounty() {
// 开始计时
Timestamp startTime = new Timestamp(System.currentTimeMillis());
// 调用这个类的静态方法把文本内容处理成 数据list
ArrayList> 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 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,调用了另一个类的静态方法


package com.fzg.common.demo.country;
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> chineseAllProvinces = getChineseAllProvincesAndCityCounty(txtUrl);
log.info(JSON.toJSONString(chineseAllProvinces));
}
/**
* 获取中国所有省份中文名和英文名
* @param txtUrl
* @return
*/
public static ArrayList> 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> 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转为list
Map innerMap = jsonObject.getInnerMap();
Set> entries = innerMap.entrySet();
ArrayList> list = new ArrayList<>();
for (Map.Entry entry : entries) {
HashMap 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;
}
}

表结构:根据表结构(表名和字段)生成代码框架


image


最后在controller层调用service实现类方法去postman测试

或者直接controller里使用get请求,直接在浏览器输入网址就可



四. 结果

image

select count(1)
from china_province_city;

image


数据库表数据:4115条数据,我们国家竟然这么多个城市,区县。




推荐阅读
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了ASP.NET Core MVC的入门及基础使用教程,根据微软的文档学习,建议阅读英文文档以便更好理解,微软的工具化使用方便且开发速度快。通过vs2017新建项目,可以创建一个基础的ASP.NET网站,也可以实现动态网站开发。ASP.NET MVC框架及其工具简化了开发过程,包括建立业务的数据模型和控制器等步骤。 ... [详细]
  • SpringBoot简单日志配置
     在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件##默认使用logbacklogging.level.r ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
author-avatar
国邮国旅刘峰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有