使用Lists存储BufferedReader文件中的数据

时间:2011-08-08 14:26:10

标签: c# list csv store bufferedreader

我一直在尝试使用列表来存储.csv文件中的数据,但由于我是新手使用列表,我似乎无法让它工作。我搜索了许多教程,但没有一个能为我工作。我肯定错过了什么。这是我到目前为止所做的:

        int row = 0;
        int col = 0;

        String fileInput = JOptionPane.showInputDialog(null, 
                "Please enter the path of the CSV file to read:");

        File file = new File(fileInput);

        BufferedReader bufRdr;
        bufRdr = new BufferedReader(new FileReader(file));
        String line = null;

        ArrayList<String[]> arrayOfNumbers = new ArrayList<String[]>();

        //read each line of text file
        while((line = bufRdr.readLine()) != null) {
            StringTokenizer st = new StringTokenizer(line,",");
            col=0;

            while (st.hasMoreTokens()) {
                //get next token and store it in the array
                // UNSURE WHAT TO PUT HERE
            }
            row++;
        }

然后我想将该列表中的数据存储到名为String[][] numbers的多维数组中。我应该做什么的想法?

1 个答案:

答案 0 :(得分:1)

在初始化字符串的multidim数组之前,您需要知道它的尺寸,它与您的最大列大小相似(如果行没有相同数量的'令牌')和行数这是你得到的行数。

    int row = 0;
    int col = 0;

    String fileInput = JOptionPane.showInputDialog(null, 
            "Please enter the path of the CSV file to read:");

    File file = new File(fileInput);

    BufferedReader bufRdr;
    bufRdr = new BufferedReader(new FileReader(file));
    String line = null;

    ArrayList<StringTokenizer> arrayOfNumbers = new ArrayList<StringTokenizer>();

    //read each line of text file
    while((line = bufRdr.readLine()) != null) {
        StringTokenizer st = new StringTokenizer(line,",");
        arrayOfNumbers.add(st);

        int actColCount = st.countTokens();

        if (col < actColCount) {
             col = actColCount;
        }
    }

    row = arrayOfNumbers.size();

现在您可以迭代存储的行并将它们放入数组中。也许会出现一些ArrayOutOfBound Exceptions,没有详细介绍过多。但那应该这样做。

    String[][] numbers = new String[row][col];

    for (int i=0; i<row; i++) {

        StringTokenizer st = arrayOfNumbers.get(i);

        int j = 0;
        while(st.hasMoreElements()) {
             numbers[i][j] = st.nextElement();
             j++;
        }
    }

请注意数组中没有值的那些字段,因为该行中没有足够的元素来填充该行中的每个列/字段。这个字段返回null。