2011-01-29 16 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 オンライン: readFile invenItem = new readFile();

私はそのように配列を渡すのが好きではないようです。

+1

私は質問を理解していない。ここで

あなたが始めるためにいくつかのコードです。 'CDinventoryItem'の1次元配列が必要なようです。 – Gabe

+0

申し訳ありませんが多分私は誤解しています。私はちょうど.datの内容を取得し、それを私のCDinventoryItem配列にロードしたいと思う。 – user569127

答えて

0

ファイルを1行ずつ読み込む必要があります。各行を,に分割し、単一のCDInventoryItemを作成します。配列に項目を追加します。

また、このメソッドは、コンストラクタCDInventoryItemにあるべきではないことに注意してください。 CDInventoryItemクラスの配列は、CDInventoryItemの配列であってはなりません。これはすべて別のクラスで行う必要があります。

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

関連する問題