A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙传磊 于 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



评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

正序浏览
曾钦 发表于 2013-3-10 23:07
不好意思,一开始没看到下面对info.txt的描述,
如果info.txt的内容是那样的话,
报异常的原因应该是info ...

:loveliness:是的!谢谢!问题解决啦!
回复 使用道具 举报
谢洋 发表于 2013-3-10 21:56
人家不是说:
info.txt文本中存的内容是:
zhangsan=30

不好意思,一开始没看到下面对info.txt的描述,
如果info.txt的内容是那样的话,
报异常的原因应该是info.txt 中多一个回车换行,
也就是有一行是没数据的,
所以读到那一行时line为空字符串,就报下标溢出了。

点评

太彪悍了,楼主都没有多的提示,这种问题都能被你发现 可见你的细心程度另人发指啊  发表于 2013-3-10 23:55

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
曾钦 发表于 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 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 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]);   
  }
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马