2011-01-29 3 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

파일을 한 줄씩 읽어야합니다. ,에서 각 행을 분할하고 단일 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

자바가 나를 잃어 버리는 곳을보십시오. 배열 CDinventoryItem이 CDinventoryItem 클래스에 있지 않아야하는 이유는 무엇입니까? – user569127