Использование списков для хранения данных из файла BufferedReader - PullRequest
0 голосов
/ 08 августа 2011

Я пытался использовать списки для хранения данных из файла .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 Ответ

1 голос
/ 09 августа 2011

, прежде чем вы сможете инициализировать ваш многомерный массив строк, вам необходимо знать его размер, который аналогичен вашему максимальному размеру столбца (в случае, если строки не имеют одинакового количества «токенов») и количеству строк какое количество строк у вас есть.

    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, которые не слишком детализированы. но это должно сделать.

    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++;
        }
    }

, пожалуйста, будьте осторожны с теми полями в массиве, которые не имеют значения, потому что в этой строке было недостаточно элементов для заполнения каждого столбца / поля в этой строке. эти поля возвращают ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...