2015-11-26 5 views
0

У меня есть два класса:Невозможно записать объект в файл в Java

public abstract class GiaoDich{ 
//variable and set/get method 
    public abstract double calcualteMoney(); 
} 

public class GiaoDichDat extends GiaoDich implements Serializable { 
    public static List<GiaoDichDat> listGiaoDichDat = new ArrayList<>(); 
     //new value 
    @Override 
    public double calculatorMoney() { 
    } 

    public void getDatafromKeyboard() { 
     //get data from keyboard 
    } 

    public double avgMoney() { 
    } 

    public void readFile() throws FileNotFoundException, IOException, ClassNotFoundException 
    { 
     List<GiaoDichDat> lsttemp = new ArrayList<GiaoDichDat>(); 
     try 
     { 
      System.out.println("Doc du lieu tu file"); 
      ObjectInputStream obis = new ObjectInputStream(new FileInputStream("GiaoDichDat.text")); 
      lsttemp = (List<GiaoDichDat>) obis.readObject(); 
      obis.close(); 
     } 
     catch (IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
     for (GiaoDichDat get : lsttemp) 
     { 
      System.out.println(get.toString()); 
     } 
    } 

    public void saveFile() throws FileNotFoundException, IOException 
    { 
     try 
     { 
      FileOutputStream fos = new FileOutputStream("GiaoDichDat.text"); 
      ObjectOutputStream obos = new ObjectOutputStream(fos); 
      obos.writeObject(listGiaoDichDat); 
      fos.close(); 
      obos.flush(); 
      System.out.println("Ghi du lieu thanh cong"); 
      obos.close(); 
     } 
     catch (IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 

После прочтения данных из терминала, я пишу в файл это нормально. Но когда я снова прочитал. У него нет данных.

+0

Пожалуйста, покажите мне код, который вы пишете и читаете данные? – phongvan

+0

Покажите мне свой файл для записи и чтения. –

+0

общественного недействительный ReadFile() бросает FileNotFoundException, IOException, \t \t \t ClassNotFoundException { \t \t Список lsttemp = новый ArrayList (); \t \t try { \t \t \t System.out.println ("Doc du lieu tu file"); \t \t \t ObjectInputStream OBIS = новый ObjectInputStream (новый FileInputStream ( \t \t \t \t \t "GiaoDichDat.text")); () obis.readObject(); \t \t \t obis.close(); \t \t} catch (IOException ex) { \t \t ex.printStackTrace(); \t \t} \t \t для (GiaoDichDat получить: lsttemp) { \t \t \t System.out.println (get.toString()); \t \t} \t} –

ответ

0

Чтобы прочитать и записать объект с ObjectInputStream и ObjectOutputStream, все ваши объекты должны реализовать Serializable, но ваш родительский класс не сможет этого сделать.

+0

да, я проверю его –

+0

Спасибо, он отлично работает !! –

+0

Родительский класс не нужно реализовывать 'Serializable.' Рассмотрим' java.lang.Object'. Родительский класс OP является абстрактным и не содержит состояния. – EJP

-1

кажется, что вы должны быть проигнорированы исключение, сброшенная:

fos.close(); 

Не закрывайте это.

obos.flush(); 

Это должно было привести к IOException из предшествующего уровня закрытия. В любом случае вы должны удалить его, так как obos.close() вызывает flush() в любом случае.

System.out.println("Ghi du lieu thanh cong"); 
obos.close(); 

Это единственное, что вам нужно.

В этих методах нет смысла ловить IOException, так как они уже объявлены, что их выбрасывают, и вызывающим абонентам необходимо знать обо всех исключениях. Удалите блоки захвата.

+0

Я добавляю его, но все еще ошибка –

+0

Ещё * тот же * ошибка? Вы здесь не очень. – EJP

+0

Да, ваше решение может исправить мою ошибку –

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