pom
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7.2</version>
</dependency>
java
import org.lionsoul.ip2region.DataBlock;
import org.lionsoul.ip2region.DbConfig;
import org.lionsoul.ip2region.DbSearcher;
import org.lionsoul.ip2region.Util;
import java.io.File;
import java.lang.reflect.Method;
public class IpUtil {
public static String getCityInfo(String ip) {
// db文件下载地址,https://gitee.com/lionsoul/ip2region/tree/master/data 下载下来后解压,db文件在data目录下
String dbPath ="D:\\workstation\\ip2region\\data\\ip2region.db";
File file = new File(dbPath);
if (file.exists() == false) {
System.out.println("Error: Invalid ip2region.db file");
}
//查询算法 B-tree
int algorithm = DbSearcher.BTREE_ALGORITHM;
try {
DbConfig config = new DbConfig();
DbSearcher searcher = new DbSearcher(config, dbPath);
Method method = null;
switch (algorithm) {
case DbSearcher.BTREE_ALGORITHM:
method = searcher.getClass().getMethod("btreeSearch", String.class);
break;
case DbSearcher.BINARY_ALGORITHM:
method = searcher.getClass().getMethod("binarySearch", String.class);
break;
case DbSearcher.MEMORY_ALGORITYM:
method = searcher.getClass().getMethod("memorySearch", String.class);
break;
default:
break;
}
if (Util.isIpAddress(ip) == false) {
System.out.println("Error: Invalid ip address");
}
DataBlock dataBlock = (DataBlock) method.invoke(searcher, ip);
return dataBlock.getRegion();
} catch (Exception e) {
e.printStackTrace();
}
return "Error: getCityInfo error";
}
}
封装
上述获取的格式是 国家|编号|省份|城市|运营商
实体类
@Data
public class RegionDetail {
private Integer id;
private String realIp;
private String countNum;
private String country;
private String province;
private String city;
private String operator;
}
使用
/**
* <p>
* 解析ip
* </p>
*
* @author jatham 2021/03/01 13:55
*/
private RegionDetail analysisAddress(String ip) {
String ipInfo = IpUtil.getCityInfo(ip);
//国家|大区|省份|城市|运营商
String[] splitIpString = ipInfo.split("\\|");
RegionDetail regionDetail = new RegionDetail();
regionDetail.setRealIp(ip);
regionDetail.setCountry(StringUtils.isNoneBlank(splitIpString[0]) ? splitIpString[0] : "");
regionDetail.setProvince(StringUtils.isNoneBlank(splitIpString[2]) ? splitIpString[2] : "");
regionDetail.setCity(StringUtils.isNoneBlank(splitIpString[3]) ? splitIpString[3] : "");
regionDetail.setOperator(StringUtils.isNoneBlank(splitIpString[4]) ? splitIpString[4] : "");
return regionDetail;
}
博主公众号
求关注