2014-11-09 6 views
0

Я создаю небольшой графический интерфейс для «менеджера фильмов» с Java и Swing.Java FileStream - ObjectOutputStream ObjectInputStream

У меня есть класс MovieTableModel, который расширяет AbstractTableModel и содержит данные для строк таблицы в объектных данных [] []. Второй класс 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); 

Оба не работают - я думаю, я понимаю, как это работает в целом, но я не знаю, как сделать это с данными в моей таблице, тем более, что он сохраняется как объект [] [], но файл является объектом. И если это сработает - как я могу добавить или удалить отдельные строки?

Спасибо за вашу помощь заранее! :)

ответ

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(); 

Поскольку это хранит все данные как один большой кусок, я не думаю, что можно просто читать/писать один элемент. Вам придется прибегать к подсчету байтов хранимых объектов, а затем перейти в правильное положение. Если вам действительно нужно будет хранить огромное количество данных таблицы, я бы использовал некоторую реляционную базу данных в качестве backend. В противном случае я бы не стал беспокоиться о такой оптимизации. Просто перепишите все, чтобы сохранить.