2011-01-29 1 views
0

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

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 on line: readFile invenItem = new readFile();

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

+1

Я не понимаю вопроса. Похоже, вам нужен 1-мерный массив 'CDinventoryItem'. – Gabe

+0

Извините, может быть, я не понимаю. Я просто хочу взять содержимое .dat и загрузить его в свой массив CDinventoryItem. – user569127

ответ

0

Вам необходимо прочитать файл по строкам. Разделите каждую строку на , и создайте один 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(); 
      } 
     } 
    } 
} 
+0

Собака правильно. Если вы хотите читать в полностью сформированных объектах, вы можете рассмотреть сериализацию объектов в Java: http://java.sun.com/developer/technicalArticles/Programming/serialization/ –

+0

Удивительный! Спасибо, что сработали. И я должен просто назвать этот метод новым readFile() ;? – user569127

+0

Посмотрите, где Java теряет меня. Почему массив CDinventoryItem не должен находиться в классе CDinventoryItem? – user569127

 Смежные вопросы

  • Нет связанных вопросов^_^