Чтение файла данных в многомерный массив Java - PullRequest
0 голосов
/ 29 января 2011

У меня есть файл .dat, который я хочу загрузить в пользовательский массив. Как мне получить его, чтобы фактически загрузить данные в массив. Данные состоят из (String, int, int, double, String).

class CDinventoryItem{


   private CDinventoryItem [] inven = new CDinventoryItem[1000];


    public CDinventoryItem (String title, int itemNumber, int numberofUnits, 
    double unitPrice, String genre){

              DataInputStream input;

            try{

                input = new DataInputStream(new FileInputStream("inventory.dat"));

                inven = input.read(CDinventoryItem[]);  //line I am receiving error on


            }
            catch ( IOException error ){
                JOptionPane.showMessageDialog( null, "File not found",
                "" ,JOptionPane.ERROR_MESSAGE);
            }


        }

}

Так что теперь readFile находится в своем собственном классе ...

class readFile {
public CDinventoryItem[] inven;

    public readFile(){

BufferedReader in = null;

try {
    in = new BufferedReader(new FileReader("inventory.dat"));
    String line = null;
    int i = 0;
    while ((line = in.readLine()) != null) {

        // process each line
        String[] parts = line.split(",");
        String title = parts[0];
        int itemNumber = Integer.parseInt(parts[1]);
        int numberofUnits = Integer.parseInt(parts[2]);
        double unitPrice = Double.parseDouble(parts[3]);
        String genre = parts[4];

        CDinventoryItem item = new CDinventoryItem(title, itemNumber, numberofUnits, 
unitPrice, genre);

        //add item to array
        inven[i] = item;
        i++;
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (in != null) {
        try {
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
}}

и я звоню из класса CDinventory

        readFile invenItem = new readFile();
        list = new JList(invenItem.inven);

но это дает мне: Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 1 онлайн: readFile invenItem = new readFile ();

Не похоже, что я передаю массив таким образом.

1 Ответ

0 голосов
/ 29 января 2011

Вам нужно прочитать файл построчно. Разбейте каждую строку на , и создайте один CDInventoryItem. Добавьте элемент в ваш массив.

Также обратите внимание, что этот метод не должен быть в конструкторе CDInventoryItem. Ваш класс CDInventoryItem не должен даже иметь массив CDInventoryItem s. Все это должно быть сделано в отдельном классе.

Вот код, с которого можно начать:

public void readFile() {

    BufferedReader in = null;

    try {
        in = new BufferedReader(new FileReader("inventory.dat"));
        String line = null;
        int i = 0;
        while ((line = in.readLine()) != null) {

            // process each line
            String[] parts = line.split(",");
            String title = parts[0];
            int itemNumber = Integer.parseInt(parts[1]);
            int numberOfUnits = Integer.parseInt(parts[2]);
            double unitPrice = Double.parseDouble(parts[3]);
            String genre = parts[4];

            CDinventoryItem item = new CDinventoryItem(title, itemNumber, unitPrice, genre);

            //add item to array
            inven[i] = item;
            i++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
...