以下是我的代码:
<%@ page contentType="text/html;charset=GBK" import="java.io.RandomAccessFile,java.io.File,java.util.ArrayList,java.util.HashMap,java.util.Iterator"%><%@ page language="java" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %><%
//驱动程序名
String driverName="com.mysql.jdbc.Driver";
//数据库用户名
String userName="root";
//密码
String userPasswd="2421543";
//数据库名
String dbName="ipadds";
//表名
String tableName="ip";
//联结字符串
String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection=DriverManager.getConnection(url);
Statement stmt = connection.createStatement();

RandomAccessFile dataFile=new RandomAccessFile(new File(application.getRealPath("./ip.txt")), "r");String line=dataFile.readLine();
while(line!=null)
{
line=new String(line.getBytes("ISO_8859_1"),"GBK");
String[] lineItems=line.split("\\t");

String sqlstr="insert into ip (ip1,ip2,add1,add2) values('"+lineItems[0]+"','"+lineItems[1]+"','"+lineItems[2]+"','"+lineItems[3]+"')";
//stmt.executeUpdate(sqlstr);
out.print(sqlstr);
line=dataFile.readLine();
}
dataFile.close();
stmt.close();
%>ip.txt中的文件格式如下:
0.0.0.0         0.255.255.255   IANA  CZ88.NET
1.0.0.0         1.255.255.255   IANA  CZ88.NET
2.0.0.0         2.255.255.255   IANA  CZ88.NET
3.0.0.0         3.255.255.255   美国 新泽西通用电气公司
4.0.0.0         4.10.255.255    美国  CZ88.NET
4.11.0.0        4.11.255.255    美国 夏威夷
4.12.0.0        4.19.77.255     美国  CZ88.NET
4.19.78.0       4.19.78.255     美国 西南政法大学
4.19.79.0       4.19.79.63      美国 Armed Forces Radio/Television
4.19.79.64      4.21.177.111    美国  CZ88.NET
4.21.177.112    4.21.177.127    美国 Kraft Group
4.21.177.128    4.21.177.255    美国 南新汉普郡学院共有262465条记录
错误:
type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: 1
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.ArrayIndexOutOfBoundsException: 1
org.apache.jsp.ipadd_jsp._jspService(ipadd

解决方案 »

  1.   

    String[] lineItems=line.split("\\t");
    应该是
    String[] lineItems=line.split("\t");
    吧。
      

  2.   

    String[] lineItems=line.split("\\t");
    这个是对的吧
    我在其他程序里就是这样用的
      

  3.   

    String[] lineItems=line.split("\t");
    即使改成这个也是同样的错误
      

  4.   

    String[] lineItems=line.split("\s");
      

  5.   

    String[] lineItems=line.split("\\t",3);不知道是3还是4 自己试一下
      

  6.   

    String[] lineItems=line.split("\\t",3);3或4都越界!!!!
      

  7.   

    lineItems[1], lineItems[2], lineItems[3]都越界
    因为只有  lineItems[0]
    现在改成了这样:
    <%@ page contentType="text/html;charset=GBK" import="java.io.RandomAccessFile,java.io.File,java.util.ArrayList,java.util.HashMap,java.util.Iterator"%><%@ page language="java" %>
    <%@ page import="java.io.*" %>
    <%@ page import="java.util.*" %>
    <%@ page import="java.sql.*" %>
    <%@ page import="javax.sql.*" %>
    <%@ page import="javax.naming.*" %><%
    //驱动程序名
    String driverName="com.mysql.jdbc.Driver";
    //数据库用户名
    String userName="root";
    //密码
    String userPasswd="2421543";
    //数据库名
    String dbName="ipadds";
    //表名
    String tableName="ip";
    //联结字符串
    String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection connection=DriverManager.getConnection(url);
    Statement stmt = connection.createStatement();

    RandomAccessFile dataFile=new RandomAccessFile(new File(application.getRealPath("./ip.txt")), "r");String line=dataFile.readLine();
    int i=0;
    while(line!=null)
    {
    line=new String(line.getBytes("ISO_8859_1"),"GBK");
    String[] lineItems=line.split("\\t");
    String str1=lineItems[0];
    int ii=str1.indexOf(",");
    String ip1=str1.substring(0,ii);

    String str2=str1.substring(ii+1,str1.length()); 
    ii=str2.indexOf(",");
    String ip2=str2.substring(0,ii);

    String str3="";
    String str4="";
    String add1="";
    String add2="";

    if((ii+1)>str2.length())
    {
    str3=str4="空";
    }
    else
    {
    str3=str2.substring(ii+1,str2.length());
    ii=str3.indexOf(",");
        add1=str3.substring(0,ii);
    if((ii+1)>str3.length())
    {
    str4="空";
    }
    else
    {
    str4=str3.substring(ii+1,str3.length());
    add2=str4;
    }
    }
    //String sqlstr="insert into ip (ip1,ip2,add1,add2) values('"+ip1+"','"+ip2+"','"+add1+"','"+add2+"')";
    //stmt.executeUpdate(sqlstr);
    out.print(i+"=="+ip1+"-"+ip2+"-"+add1+"-"+add2+"<p>");
    line=dataFile.readLine();
    i++;
    }
    dataFile.close();
    stmt.close();%>
    我把原来的空格都替换成了一个,
    但是只能读取部分数据,读188行后,就中断了,也没有错误提示
      

  8.   

    我是把qq中的ip数据库,倒成了txt中,现在想把他插入到数据库中,这样做可以吗?是不是数据量太大了