项目-day-35

2021.11.12 晴   

相较于昨天,所做出的优化:

package practice03.controller;

import java.util.Scanner;

import practice03.manager.DataProcessManager;

/**
 * 程序入口
 * 
 */
public class SystemController {
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);

		while (true) {
			System.out.println("请输入IP : ");
			String ip = scanner.nextLine();
			System.out.println("正在加载请稍后……");
			long startTime = System.currentTimeMillis();
			String location=DataProcessManager.getLocation(ip);
			if(location=="IP地址格式不正确,请重新输入"){
				System.out.println(location);
				continue;
			}
			long endTime = System.currentTimeMillis();
			System.out.println("地址为:"+location);
			System.out.println("运行时间: " + (endTime - startTime));
			System.out.println("请问是否需要结束查询   1、 继续    2、结束   ");
			String canshu=scanner.nextLine();
			if(canshu.equals("1")){
				continue;
			}else if(canshu.equals("2")){
				break;
			}
		}

	}
}
package practice03.manager;

import practice03.util.DBUtil;
import practice03.pojo.IPAndLocationPojo;
import practice03.util.FileOperatorUtil;
import practice03.util.IPUtil;
import practice03.util.RegexUtil;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 该类为项目中管理类
 *  
 */
public class DataProcessManager {
	private static IPAndLocationPojo[] ipLocationPojoArr = null;
	static {
		// 地址库文件
		String ipLibrartPath = "ip_location_relation.txt";
		// 字符编码
		String encoding = "utf-8";
		// 获取数据
		List<IPAndLocationPojo> ipAndLocationPojos = null;
		try {
			ipAndLocationPojos = DataProcessManager.getPojoList(ipLibrartPath,
					encoding);
		} catch (IOException e) {
			e.printStackTrace();
		}
		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs=null;
		String sql="insert into ip(startIp,endIp,location) values (?,?,?)";
		String sql02="select count(*) from ip";
		try {
			conn = DBUtil.getConnection();
			stmt=conn.prepareStatement(sql02);
			rs=stmt.executeQuery();
			int count=0;
			while(rs.next()){
				 count=rs.getInt("count(*)");
			}
			if(count==0){
			stmt=conn.prepareStatement(sql);
			System.out.println("正在将数据写入数据库中,请稍后");
			for (IPAndLocationPojo ipAndLocationPojo : ipAndLocationPojos) {
				stmt.setLong(1, ipAndLocationPojo.getStartIPLong());
				stmt.setLong(2, ipAndLocationPojo.getEndIPLong());
				stmt.setString(3,  ipAndLocationPojo.getLocation());
				stmt.executeUpdate();
			}
			System.out.println("数据库写入完成");
			}		
		} catch (Exception e) {
		e.printStackTrace();
		}finally{
			DBUtil.close(stmt);
			DBUtil.close(conn);
		}
	}

	/**
	 * 对外提供的接口,入参IP出参地址
	 * 
	 * @param ip
	 * @return
	 */
	public static String getLocation(String ip) {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		String canshu=null;
		if(!RegexUtil.isValidIP(ip)){
			return "IP地址格式不正确,请重新输入";
		}else{
		long  ip1=IPUtil.ipToLong(ip);
		String sql="select location from ip where startIp<"+ip1 +" and endIp >"+ip1+";";
		try {			
			conn = DBUtil.getConnection();
			stmt = conn.createStatement();
			rs=stmt.executeQuery(sql);
			while(rs.next()){
				canshu=rs.getString("location");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			DBUtil.close(rs);
			DBUtil.close(stmt);
			DBUtil.close(conn);
		}
		return  canshu ;
	}
}

	/**
	 * 把读取到的List<String> 转换为 List<IPAndLocationPojo>
	 * 
	 * @param ipLibrartPath
	 * @param encoding
	 * @return
	 * @throws IOException
	 */
	public static List<IPAndLocationPojo> getPojoList(String ipLibrartPath,
			String encoding) throws IOException {
		List<String> lineList = FileOperatorUtil.getLineList(ipLibrartPath,
				encoding);
		List<IPAndLocationPojo> ipAndLocationPojos = new ArrayList<IPAndLocationPojo>();
		// 遍历 获取每一行
		for (String string : lineList) {
			if (string == null || string.trim().equals("")) {
				continue;
			}
			// 以\t分割,得到三个列
			String[] columnArray = string.split("\t");
			// 创建结构化对象
			IPAndLocationPojo ipAndLocationPojo = new IPAndLocationPojo(
					columnArray[0], columnArray[1], columnArray[2]);
			// 保存到集合中
			ipAndLocationPojos.add(ipAndLocationPojo);
		}
		return ipAndLocationPojos;
	}
}
package study.IPSearch_v2.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式工具类
 * 
 */
public class RegexUtil {
	private static String regexIP = "((25[0-5]|2[0-4]\\d|[1]{1}\\d{1}\\d{1}|[1-9]{1}\\d{1}|\\d{1})($|(?!\\.$)\\.)){4}";

	/**
	 * 校验IP
	 * @param ip
	 * @return
	 */
	public static boolean isValidIP(String ip) {
		return isValid(regexIP, ip);
	}

	/**
	 * 格式验证
	 * 
	 * @param regex
	 * @param input
	 * @return
	 */
	public static boolean isValid(String regex, String input) {
		Pattern pattern = Pattern.compile(regex);
		// 创建匹配器
		Matcher matcher = pattern.matcher(input);
		return matcher.matches();
	}

	/**
	 * 数据提取
	 * 
	 * @param regex
	 * @param input
	 * @param groupIndex
	 * @return
	 */
	public static String getMatchContent(String regex, String input,
			int groupIndex) {
		Pattern pattern = Pattern.compile(regex);
		// 创建匹配器
		Matcher matcher = pattern.matcher(input);
		if (matcher.find()) {
			return matcher.group(groupIndex);
		}
		return null;
	}

	public static String getMatchContent(String regex, String input) {
		return getMatchContent(regex, input, 0);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值