根据IP获取城市-Java调用“ip2region”地址库实例
根据IP获取城市-Java调用“ip2region”地址库实例-妈妈再也不用担心我的ip地址定位啦
-
ip2region
准确率99.9%的ip地址定位库,0.0x毫秒级查询,数据库文件大小只有1.5M,提供了java,php,c,python,nodejs,golang查询绑定和Binary,B树,内存三种查询算法
github地址:
-
下载v1.3版本:
解压目录如下图:
-
新建java项目,导入binding/java下的代码,并复制”data/ip2region.db”到“src目录
-
创建“IPUtil”.java ,内容参考”org.lionsoul.ip2region.test.TestSearcher.java“ maven仓库地址 <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>1.7.2</version> </dependency> gradle compile group: org.lionsoul, name: ip2region, version: 1.7.2
- package com.xx;
- import java.io.File;
- import java.lang.reflect.Method;
- import org.lionsoul.ip2region.DataBlock;
- import org.lionsoul.ip2region.DbConfig;
- import org.lionsoul.ip2region.DbSearcher;
- import org.lionsoul.ip2region.Util;
- public class IPUtil {
- public static String getCityInfo(String ip){
- //db
- String dbPath = IPUtil.class.getResource("/ip2region.db").getPath();
- File file = new File(dbPath);
- if ( file.exists() == false ) {
- System.out.println("Error: Invalid ip2region.db file");
- }
- //查询算法
- int algorithm = DbSearcher.BTREE_ALGORITHM; //B-tree
- //DbSearcher.BINARY_ALGORITHM //Binary
- //DbSearcher.MEMORY_ALGORITYM //Memory
- try {
- DbConfig config = new DbConfig();
- DbSearcher searcher = new DbSearcher(config, dbPath);
- //define the method
- 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;
- }
- DataBlock dataBlock = null;
- if ( Util.isIpAddress(ip) == false ) {
- System.out.println("Error: Invalid ip address");
- }
- dataBlock = (DataBlock) method.invoke(searcher, ip);
- return dataBlock.getRegion();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- public static void main(String[] args) throws Exception{
- System.err.println(getCityInfo("220.248.12.158"));
- }
- }
运行结果如下:
