簡體   English   中英

Java FileStream-ObjectOutputStream ObjectInputStream

[英]Java FileStream - ObjectOutputStream ObjectInputStream

我正在使用Java和Swing為“電影管理器”創建一個小GUI。

我有一個MovieTableModel類,該類擴展了AbstractTableModel,並且在Object [] [] data中具有表行的數據。 第二類MovieUI管理JFrame以及一般的GUI。 最后一個類MovieManager實際上只是創建movieui實例並使之可見的主要功能。

現在我的問題是,到目前為止,數據已“保存”在我的代碼中。 我希望它能夠被加載和保存。 如果沒有保存文件,則應創建一個保存文件,並且我應該能夠添加或刪除該文件的行(已經設置了動作偵聽器,我只需要一種處理文件的方法)。

因此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 [] []卻將文件保存為一個東西。 如果可以解決,如何添加或刪除單行?

謝謝您的幫助! :)

如果序列化表模型或支持該表模型的對象,則可以稍后讀取它並將其還原到JTable。

當您再次從ObjectInputStream讀取對象時,我認為您缺少對要保存的正確類型的強制轉換:

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

創建新文件后,需要使用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();

因為這會將所有數據存儲為一個大塊,所以我認為不可能只讀取/寫入一個元素。 您將不得不求助於存儲對象的字節計數,然后跳到正確的位置。 如果您確實需要存儲大量表數據,則可以使用一些關系數據庫作為后端。 否則,我不會為這種優化而煩惱。 只要保存就重寫所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM