String index out of range: -1
看来是下标越界,是数组里面的,注意下标的范围

解决方案 »

  1.   

    <%@ page import="java.util.*,java.lang.*,java.io.*"%>
    <%
    String action=request.getParameter("action");
    String vote=request.getParameter("vote");
    String polldata="";
    if(action.compareTo("poll")==0){
       //生成文件路径和文件名
       
       String resultsDir="C:/tomcat/webapps/Root/business/vote/";
       FileWriter resultsFile=new FileWriter(resultsDir + System.getProperty("file.separator") + "vote.txt",true);
       //判断文件是否存在
       File myfile=new File(resultsDir + System.getProperty("file.separator") + "vote.txt");
       if(!(myfile.exists())){
         PrintWriter toFile= new PrintWriter(resultsFile);
         if(vote.compareTo("shopping")==0) polldata="1:0:0";
         if(vote.compareTo("support")==0) polldata="0:1:0";
         if(vote.compareTo("product")==0) polldata="0:0:1";
         toFile.println("polldata");
         resultsFile.close();
         out.println(polldata);
       }
       else{
       //其他次投票
      
      FileInputStream tfile=new FileInputStream (resultsDir + System.getProperty("file.separator") + "vote.txt");
      String str="";
      int c;
      
      while ((c=tfile.read())!=-1){
        str=str+(char)c;
        }
        
      //找到第一个“:”的位置
      int first=str.indexOf(":");
       //找到第二个“:”的位置
      int last=str.lastIndexOf(":");
      //得到String的长度
      int lenth=str.length();
      //取出第一个“:”前的数据
      String First=str.substring(0,first);
      //取出第一个“:”和第二个“:”之间的数据
      String Next=str.substring(first+1,last);
      //取出最后一个“:”后的数据
      String Last=str.substring(last+1,lenth);
      //关闭文件
      tfile.close();
      
      //把String转换成Long
      Long a1=new Long(First);
      Long a2=new Long(Next);
      Long a3=new Long(Last);
      
      long b1=a1.longValue();
      long b2=a2.longValue();
      long b3=a3.longValue();
      
      //把每次投票结果累加1
      if(vote.compareTo("shopping")==0) b1=b1+1;
      if(vote.compareTo("support")==0) b2=b2+1;
      if(vote.compareTo("product")==0) b3=b3+1;
      
      Long c1=new Long(b1);
      Long c2=new Long(b2);
      Long c3=new Long(b3);
      
      //把Long转换成String
      String d1=c1.toString();
      String d2=c2.toString();
      String d3=c3.toString();
      
      //总票数累加
      str=d1+":"+d2+":"+d3;
      
      //把结果写入vote.txt文件中
      RandomAccessFile savefile = new RandomAccessFile(resultsDir + System.getProperty("file.separator") + "vote.txt","rw");
      savefile.writeBytes(str);
      savefile.close();
    }
      
    %>
    <script language=javascript>
        alert("Thanks for your voting!");
        self.location="../index.jsp"
    </script>
    <%
    }
    %>
      

  2.   

    我研究你的的代码:可能问题是你的vote.txt是空的,if(!(myfile.exists())){的判断没有作用。你再试一试
      

  3.   

    在jsp文件中不要解固定地址。
      

  4.   

    FileInputStream tfile=new FileInputStream (resultsDir + System.getProperty("file.separator") + "vote.txt");
    这行代码有问题,System.getProperty("file.separator") 在windows下得到的应该是“\”而你前面用的都是‘/’,所以建议你用‘/’
      

  5.   

    楼上几位有说错的地方:StringIndexOutOfBoundsException是说你在对字符串进行操作时出错了,而不是数组。问题自然是越界,主要表现在:取字符串的子串。看看你上面的就知道了。
      

  6.   

    if(vote.compareTo("shopping")==0) polldata="1:0:0";
         if(vote.compareTo("support")==0) polldata="0:1:0";
         if(vote.compareTo("product")==0) polldata="0:0:1";
         toFile.println("polldata");
         resultsFile.close();
         out.println(polldata);
    toFile.println("polldata");这句好像应该是toFile.println(polldata);
    否则你的str里面是'polldata"而不是1:0:0,当然在你取得.indexof(":")的时候得到的是-1,随后你的substring()就暴错了吧,good luck