2016-11-23 4 views
0

У меня есть проблема с сохранением объекта в файл. У меня есть класс FileManager, который содержит метод, который сохраняет объект в файл. Этот метод используется в классе Control, который содержит основной цикл (выбор различных параметров). Я хотел бы сохранить объект с выбором опции EXIt, но ничего не происходит. Когда я добавляю новую опцию (т. Е. 6 - Сохранить базу данных), программа работает нормально. Я буду благодарен за любые подсказки, что может быть неправильным.Сериализация, сохранение объектов

class FileManager { 
    package utils; 

    import java.io.FileNotFoundException; 
    import java.io.FileOutputStream; 
    import java.io.IOException; 
    import java.io.ObjectOutputStream; 

    import data.DataBase; 

    public class FileManager { 
     public static final String FILE_NAME = "file.txt"; 

     public void writeDataBaseToFile(DataBase db) { 
     try (
       FileOutputStream fos = new FileOutputStream(FILE_NAME); 
       ObjectOutputStream oos = new ObjectOutputStream(fos); 
       ) { 
      oos.writeObject(db); 
     } catch (FileNotFoundException e) { 
      System.err.println("Błąd"); 
     } catch (IOException e) { 
      System.err.println("Błąd"); 
     } 
    } 
} 

управления Класс:

class Control { 
    package app; 

    import data.DataBase; 
    import data.Expense; 
    import data.Income; 
    import utils.AccountInfo; 
    import utils.AddData; 
    import utils.FileManager; 
    import utils.Info; 
    import utils.Options; 

    public class Control { 
    private AccountInfo account; 
    private AddData addData; 
    private DataBase dataBase; 
    private Info inf; 
    private Income income; 
    private FileManager fileManager; 

    public Control() { 
     addData = new AddData(); 
     dataBase = new DataBase(); 
     inf = new Info(dataBase); 
     account = new AccountInfo(dataBase); 
     fileManager = new FileManager(); 
    } 

    public void ControlLoop() { 
     Options option; 
     printOptions(); 
     while((option = Options.createOption(addData.getOption())) != Options.EXIT) { 
      try { 
       switch(option) { 
       case ADD_INCOME: 
        addIncome(); 
        break; 
       case ADD_EXPENSE: 
        addExpense(); 
        break; 
       case PRINT_INCOME: 
        printIncome(); 
        break; 
       case PRINT_EXPENSE: 
        printExpense(); 
        break; 
       case RESUME_ACCOUNT: 
        resumeAccount(); 
        break; 
       case EXIT: 
        saveData(); 
        } 
      } catch(NullPointerException ex) { 

      } 
      printOptions(); 
     } 
     addData.close(); 
    } 

    public void addIncome() { 
     income = addData.createIncome(); 
     dataBase.addBudget(income); 
    } 

    public void addExpense() { 
     Expense expense = addData.createExpense(); 
     dataBase.addBudget(expense); 
    } 

    public void printIncome() { 
     inf.printIncome(); 
    } 

    public void printExpense() { 
     inf.printExpense(); 
    } 

    public void resumeAccount() { 
     account.resumeIncome(); 
     account.resumeExpense(); 
    } 

    public void saveData() { 
     fileManager.writeDataBaseToFile(dataBase); 
    } 

    public void printOptions() { 
     System.out.println("Wybierz opcję:"); 
     for(int i=0; i<6; i++) { 
      System.out.println(Options.values()[i]); 
     } 
    } 
} 
+0

попробуйте добавить разрыв; после случая EXIT – maxTrialfire

+0

Добро пожаловать в переполнение стека! Похоже, вам нужно научиться использовать отладчик. Пожалуйста, помогите нам с некоторыми [дополнительными методами отладки] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Если у вас все еще есть проблемы после этого, пожалуйста, не забудьте вернуться с более подробной информацией. –

ответ

0

Ваш код никогда не может достигнуть дело EXIT.

Потому что, когда option является EXIT, он завершает цикл.

while ((option=...) != Options.EXIT) { 
    // execute loop body when option is not EXIT 
    switch (option) { 
    ... 
    case Options.EXIT: // <-- it can simply not reach here. not ever. 
     saveData(); 
} 

Try ход saveData() вне цикла.

while (...) { // process options 
} 
// We are exiting, save data. 
saveData(); 
addData.close(); 

P.S. Вам необходимо закрыть выходной поток в вашем FileManager.

Смежные вопросы