2014-11-09 3 views
0

Java 및 Swing을 사용하여 "영화 관리자"용으로 약간의 GUI를 만들고 있습니다.Java FileStream - ObjectOutputStream ObjectInputStream

나는 AbstractTableModel을 확장하고 Object [] [] 데이터에서 테이블의 행에 대한 데이터를 갖는 MovieTableModel 클래스를가집니다. 두 번째 클래스 MovieUI는 일반적으로 GUI 인 JFrame을 관리합니다. MovieManager의 마지막 클래스는 사실 movieui의 인스턴스를 만들고 표시 할 수있는 주요 함수입니다.

내 문제는 지금까지 데이터가 내 코드에 "저장 됨"입니다. 내가 적재하고 구할 수 있기를 바랍니다. 저장 파일이 없으면 파일을 만들어야하고 추가하거나 삭제할 수 있어야합니다. (actionlisteners는 이미 설정되어 있으므로 파일을 처리하는 방법 만 필요합니다).

는 그래서 GUI는 다음과 같습니다 MovieManager

이것은 내가 뭘하려 좀 있습니다 :

 File tabledata = new File("tabledata.class"); 
    if (!tabledata.exists()) { 
     try { 
      tabledata.createNewFile(); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
    } 
    tabledata. 



    FileInputStream in = new FileInputStream("tabledata.class"); 
    ObjectInputStream input = new ObjectInputStream(in); 
    Object data = input.readObject(); 
    System.out.print(data); 

모두 작동하지 않았다 - 나는이 일반적으로 어떻게 작동하는지 이해 할 생각하지만 특히 테이블 [Object] []로 저장되었지만 파일이 Object 인 것처럼 내 테이블의 데이터를 만드는 방법을 모르십시오. 그게 효과가 있다면 - 어떻게하면 단일 행을 추가하거나 삭제할 수 있습니까?

미리 도움을 주셔서 감사합니다. :)

답변

0

테이블 모델 또는 테이블 모델을 백업하는 개체를 직렬화하면 나중에 읽을 수 있고 JTable에 복원 할 수 있습니다. 당신이하는 ObjectInputStream에서 객체를 다시 읽을 때

, 나는 당신이 저장하는 올바른 유형으로 캐스트를 누락 생각 :

FileInputStream in = new FileInputStream("tabledata.class"); 
ObjectInputStream input = new ObjectInputStream(in); 
Object[][] data = (Object[][])input.readObject(); 
0

당신이 ObjectOutputStream를 사용하여 데이터를 쓸 필요가 새 파일을 생성 한 후와 ObjectInputStream으로 읽으십시오.

Object[][] data; 
//save 
File tabledata = new File("tabledata.dat"); //I wouldn't use class extension (class is for compiled Java) 
//creation of file omitted 
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(tabledata)); 
out.writeObject(data); 
out.close(); 

//load 
ObjectInputStream in = new ObjectInputStream(new FileInputStream(tabledata)); 
data = (Object[][]) in.readObject(); //explict cast required 
in.close(); 

이것은 모든 데이터를 하나의 큰 덩어리로 저장하기 때문에 하나의 요소를 읽고 쓰는 것이 가능하지 않다고 생각합니다. 저장된 개체의 바이트 수를 계산 한 다음 올바른 위치로 건너 뜁니다. 방대한 양의 테이블 데이터를 저장해야한다면, 관계형 데이터베이스를 백엔드로 사용할 것입니다. 그렇지 않으면 나는 그런 최적화를 귀찮게하지 않을 것이다. 저장시 모든 내용을 다시 작성하십시오.