将数据从文件加载到Vector结构

时间:2010-05-29 13:11:52

标签: java file parsing vector

我正在尝试解析固定宽度格式的文件,从中提取x,y值,然后将它们存储在Vector中的int[]数组中。 文本文件如下所示:

  

0006 0015
  0125 0047
  0250 0131

这就是代码:

    Vector<int[]> vc = new Vector<int[]>();

    try {
        BufferedReader file = new BufferedReader(new FileReader("myfile.txt"));
        String s;
        int[] vec = new int[2];

        while ((s = file.readLine()) != null) {
            vec[0] = Integer.parseInt(s.substring(0, 4).trim());
            vec[1] = Integer.parseInt(s.substring(5, 8).trim());
            vc.add(vec);
        }
        file.close();
    } catch (IOException e) {
    }

    for(int i=0; i<vc.size(); i++){
        for(int j=0; j<2; j++){
            System.out.println(vc.elementAt(i)[j]);
        }
    }

但输出只显示最后一行。

250  
131  
250  
131  
250  
131

我应该以某种方式使用Vector.nextElement()来获取我的所有数据吗?

2 个答案:

答案 0 :(得分:3)

你需要在循环的每次传递中创建一个新的int []

    while ((s = file.readLine()) != null) {
        int[] vec = new int[2];
        vec[0] = Integer.parseInt(s.substring(0, 4).trim());
        vec[1] = Integer.parseInt(s.substring(5, 8).trim());
        vc.add(vec);
    }

否则你只有多个引用同一个数组,你在每次传递时都会覆盖它。

答案 1 :(得分:1)

您基本上将同一个数组三次添加到Vector,同时更新其值(这就是为什么您拥有的值是文件中的最后一个)。

最后,您将在Vector中有3个引用指向同一个变量的引用,您需要在每次迭代时实例化一个新引用,而不仅仅是在开始时。这是因为当您将vec添加到向量时,{{1}}不会被欺骗,只会传递它的引用。