做了一个php的网站
想显示登陆者的ip地址和ip所在地
想法是这样的
在mysql里建个ip数据库表
把以下形式的.txt文件转换成ip地址是十进制的.sql文件
.txt文件格式如下:
0.0.0.0         0.255.255.255   IANA  CZ88.NET
4.12.0.0        4.19.77.255     美国  CZ88.NET
4.19.78.0       4.19.78.255     美国 西南政法大学因为空格数目不等,不知道怎么写程序转换ip地址转换成十进制的方法如下:private static long ipToLong(String strIP) 
  //将127.0.0.1 形式的IP地址转换成10进制整数,这里没有进行任何错误处理 
  { 
      int j=0; 
      int i=0; 
      long [] ip=new long[4]; 
      int position1=strIP.indexOf("."); 
      int position2=strIP.indexOf(".",position1+1); 
      int position3=strIP.indexOf(".",position2+1);  
      ip[0]=Long.parseLong(strIP.substring(0,position1)); 
      ip[1]=Long.parseLong(strIP.substring(position1+1,position2)); 
      ip[2]=Long.parseLong(strIP.substring(position2+1,position3)); 
      ip[3]=Long.parseLong(strIP.substring(position3+1)); 
      return (ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3];  
  } 
想请求各位大大,能编个java程序来实现,我只是java入门,编不好,只能看懂一点,
可以把那个.txt文件转换成十进制ip的.txt文件就可以了谢谢各位了!!

解决方案 »

  1.   

    使用以逗号分开的文本文件,在MySQL中使用load data infile命令也可以导入到MySQL中的。import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;public class IPTest {
        public static void main(String[] args) {
            File oldFile = new File("1.txt");
            File newFile = new File("_1.txt");
            IPUtil util = new IPUtil();
            util.convertToFile(oldFile, newFile);
            System.out.println("ok!");
        }
    }class IPData {
        private String ip1;
        private String ip2;
        private String nation;
        private String name;
        private long longIp1;
        private long longIp2;
        public String getIp1() {
            return ip1;
        }
        public void setIp1(String ip1) {
            this.ip1 = ip1;
            this.longIp1 = IPUtil.ipToLong(ip1);
        }
        public String getIp2() {
            return ip2;
        }
        public void setIp2(String ip2) {
            this.ip2 = ip2;
            this.longIp2 = IPUtil.ipToLong(ip2);
        }
        public long getLongIp1() {
            return longIp1;
        }
        public long getLongIp2() {
            return longIp2;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getNation() {
            return nation;
        }
        public void setNation(String nation) {
            this.nation = nation;
        }
        public String toString() {
            return String.format("%s(%d), %s(%d), %s, %s", ip1, longIp1, ip2, longIp2, nation, name);
        }
        public String toNumString() {
            return String.format("%d,%d,%s,%s", longIp1, longIp2, nation, name);
        }
    }class IPUtil {
        /**
         * 将IP地址转为long数据
          * @param strIP
         * @return
         */
        public static long ipToLong(String strIP) {
            String[] ips = strIP.split("\\.");
            long[] ip = new long[ips.length];
            for (int i = 0; i < ips.length; i++) {
                ip[i] = Long.parseLong(ips[i]);
            }
            return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
        }    /**
         * 进行文件转换(将IP地址转为long数据)
          * @param oldFile
         * @param newFile
         */
        public void convertToFile(File oldFile, File newFile) {
            BufferedReader br = null;
            BufferedWriter bw = null;
            String line = System.getProperty("line.separator");
            try {
                br = new BufferedReader(new FileReader(oldFile));
                bw = new BufferedWriter(new FileWriter(newFile));
                String str = null;            
                while ((str = br.readLine()) != null) {
                    IPData ipdata = toIPData(str.trim());
                    bw.write(ipdata.toNumString() + line);
                }            
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    br.close();
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }    /**
         * 分隔旧文件行串
          * @param str
         * @return
         */
        private IPData toIPData(String str) {
            String[] strs = str.split("\\s+");
            IPData ipdata = new IPData();
            ipdata.setIp1(strs[0]);
            ipdata.setIp2(strs[1]);
            ipdata.setNation(strs[2]);
            ipdata.setName(strs[3]);
            return ipdata;
        }
    }
      

  2.   

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at IPUtil.toIPData(IPTest.java:121)
    at IPUtil.convertToFile(IPTest.java:94)
    at IPTest.main(IPTest.java:13)
    请问这个怎么改??
    谢谢
      

  3.   

    以下是导入数据库的格式
      id      begin_ip        end_ip       area      detail  
       1      0               16777215     IANA      CZ88.NET 
       2      16777216        33554431     IANA      CZ88.NET 
       3      33554432        50331647     IANA      CZ88.NET 大概转换后的“_1.txt”文本格式如下:0, 16777215, IANA, CZ88.NET
    16777216, 33554431, IANA, CZ88.NET
    50331648, 67108863, 美国, 新泽西通用电气公司
    67108864, 67829759, 美国, CZ88.NET
    67829760, 67895295, 美国, 夏威夷
    哪为大大能帮我改一下?谢谢