从文件和商店中读取

时间:2012-07-25 15:50:19

标签: java

我正在尝试读取文件并使用hashmap存储它,但是存在此错误“java.lang.ArrayIndexOutOfBoundsException:0”。我的输入有两个由空格分隔的列 名称ID如此,具有不同的条目。感谢帮助。感谢。

输入:

Mary ID
Mary Lastname
Mary Place
Mary DOB
Mary Homepage
Mary Postcode
John ID
John Lastname
John Place
John DOB
John Homepage
John Postcode

代码:

import java.util.*;

class ReadFileAndStoreHashmap {
    public static void main(String[] args)  {
        try{
            Scanner scanner = new Scanner(new FileReader(".txt"));

            HashMap<String, String> map = new LinkedHashMap<String, String>();

            while (scanner.hasNextLine()) {
                String[] columns = scanner.nextLine().split(" ");
                map.put(columns[0], columns[1]);
                System.out.println(map);
            }
        }
        catch (Exception e) {
            System.out.println(e.toString());
        }
    }
}

3 个答案:

答案 0 :(得分:3)

我会检查您尝试扫描的行。我怀疑它是空白的,因此扫描仪无法按需分割它。

我建议断言/检查返回数组的长度。如果它没有2个元素,那么你可以轻松地报告这个并继续或中断,同时向用户报告错误的内容。

答案 1 :(得分:2)

你很可能在某个地方有一个空行(你的文件是否以换行结束?然后可能会有一个空行。)

添加支票

if(columns.length == 2) 

答案 2 :(得分:0)

我更喜欢亲自使用BufferedReader。

这是我的建议:

try {
    String line;
    BufferedReader filestart = new BufferedReader(new FileReader(file));
    for (line = filestart.readLine(); line !=null; line = filestart.readLine()) {

          String[] columns = line.split(" ");
          map.put(columns[0], columns[1]);
          System.out.println(map);

    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

拥有“line!= null”应确保在尝试之前绝对可以拆分该行。