黑马程序员技术交流社区

标题: 求助:将流中的数据存储到集合中,代码异常,无法找出... [打印本页]

作者: 孙传磊    时间: 2013-3-10 20:34
标题: 求助:将流中的数据存储到集合中,代码异常,无法找出...
本帖最后由 孙传磊 于 2013-3-11 10:43 编辑

/*
*  演示:如何将流中的数据存储到集合中
*  想要将info.txt中键值数据存到集合中进行操作。
*     1.用以各留和info.txt文件关联
*     2.读取一行数据,并将该行数据用“=”进行切割。
*     3。等号左边作为键,右边作为值,存到Properties集合中
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

public class JavaFileList {
public static void main(String[] args) throws IOException {
  setGetP();
}
public static void setGetP() throws IOException{
  BufferedReader bufr=new BufferedReader(new FileReader("C:\\Users\\esws\\Desktop/info.txt"));//info.txt文本文件在桌面上一检查过,给出的路径是对的
  String line=null;
Properties prop=new Properties();
  while((line=bufr.readLine())!=null){
   String[] arr=line.split("=");
            prop.setProperty(arr[0],arr[1]);   
  }
}
}
为什么会出现异常呢?上面的代码有错误码?我通过验证方法验证文件的值确实存入到了Properties 集合的对象中。看视频中老师的程序并没有异常,求解!
异常信息是:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
            at file.JavaFileList.setGetP(JavaFileList.java:32)
            at file.JavaFileList.main(JavaFileList.java:23)
info.txt文本中存的内容是:
zhangsan=30
wangwu=50




作者: BitmapFactory    时间: 2013-3-10 21:06
本帖最后由 张学林 于 2013-3-10 22:46 编辑

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;

public class JavaFileList {//问题可能出在这里,在Eclipse里它会在这里报错,可能是和其它类有冲突吧
public static void main(String[] args) throws IOException {
  setGetP();
}
public static void setGetP() throws IOException{
  BufferedReader bufr=new BufferedReader(new FileReader("C:\\Users\\esws [code]\\Desktop/info.txt"));//info.txt文本文件在桌面上一检查过,给出的路径是对的
  String line=null;
Properties prop=new Properties();
  while((line=bufr.readLine())!=null){
   String[] arr=line.split("=");
            prop.setProperty(arr[0],arr[1]);   
  }
}
}

作者: 曾钦    时间: 2013-3-10 21:45
本帖最后由 曾钦 于 2013-3-10 21:46 编辑

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
            at file.JavaFileList.setGetP(JavaFileList.java:32)
            at file.JavaFileList.main(JavaFileList.java:23)

这个异常是 数组下标越界异常。
看到你代码的32行,
prop.setProperty(arr[0],arr[1]);   
这一行中,arr[1]下标越界了,
为什么会越界呢,因为 String[] arr=line.split("=");
这行语句对line进行操作的结果不一定能得到一个长度为2的String 数组。
也就是说 并不是所有的line都有=存在,
或者说不是所有的line ‘=’ 两边都字符存在。
你需要对arr进行一个判断。以避免arr[1]导致的下标越界。
作者: 谢洋    时间: 2013-3-10 21:56
曾钦 发表于 2013-3-10 21:45
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
            at file.JavaFileL ...

人家不是说:
info.txt文本中存的内容是:
zhangsan=30
wangwu=50


作者: 曾钦    时间: 2013-3-10 23:07
谢洋 发表于 2013-3-10 21:56
人家不是说:
info.txt文本中存的内容是:
zhangsan=30

不好意思,一开始没看到下面对info.txt的描述,
如果info.txt的内容是那样的话,
报异常的原因应该是info.txt 中多一个回车换行,
也就是有一行是没数据的,
所以读到那一行时line为空字符串,就报下标溢出了。
作者: 孙传磊    时间: 2013-3-11 10:43
曾钦 发表于 2013-3-10 23:07
不好意思,一开始没看到下面对info.txt的描述,
如果info.txt的内容是那样的话,
报异常的原因应该是info ...

:loveliness:是的!谢谢!问题解决啦!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2