2013-12-20 2 views
-1

Я пишу программу ресторана. Когда пользователь подтверждает свой заказ, заказ хранится в массиве порядка типоразмеров. Почему?, потому что, когда пользователь хочет закрыть программу, все заказы сохраняются в файле с именами позиций и информацией о каждом элементе. Кроме того, каждый объект заказа имеет массив элементов типа внутри него!Написание файла при закрытии окна

Не могли бы вы помочь мне в написании этого файла? Я знаю, что это будет в методе processWindowEvent.

Это моя попытка, я знаю, что я должен удалить textArea.getText(), но я не знаю, как печатать все элементы.

protected void processWindowEvent(WindowEvent e){ 

     if (e.getID() == WindowEvent.WINDOW_CLOSING) { 
      JOptionPane.showMessageDialog(this,"All operation have been saved "); 

      try{ 
       outFile=new File("Orderslist.txt"); 
       out=new FileOutputStream(outFile); 
       ob=new PrintWriter(out);} 
       catch(IOException M){M.getMessage(); } 
      for(int i=0;i<o2.length;i++){ 
       if(o2[i]!=null){ 
        if(o2[i].getCount()<=4) 
        ob.println(o2[i].toString()+"\n--------------\n"+textArea.getText()+"--------------\n"+"\nTotal: "+o2[i].getTotalPrice()); 

        else if(o2[i].getCount()>4) 
        ob.println(o2[i].toString()+"\n--------------\n"+textArea.getText()+"--------------\n"+"\nTotal Price#: "+o2[i].getTotalPrice()+"\n\nDiscount 20%\n\n--------------\nTotal price#: "+(o2[i].getTotalPrice()-(o2[i].getTotalPrice()*0.2))); 

       } 
      } 
+0

отправил его выше – user3102872

+0

Нет проблем в методе закрытия, проблема в том, что текстовый файл, который записывается, является пустой. – user3102872

ответ

0

В конструкторе Widnow добавить следующее:

public Window() { 
    this.addWindowListener(new WindowAdapter(){ 
     @Override 
     public void windowClosing(WindowEvent arg0) { 
      writeFile(textArea.getText()); //Call your method 
      System.exit(0); 
     } 
    }); 
    ... 
} 

Для записи файла:

File file = new File("myFile.txt"); 
FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
BufferedWriter bw = new BufferedWriter(fw); 

bw.write("Texto to write"); 
bw.close(); 
+0

Что вы подразумеваете под конструкцией моего окна? – user3102872

+0

Основы Java: у вас есть класс, который представляет ваш ** Window/JFrame/Frame/etc ** (** класс MyWindow расширяет JFrame **). ** Каждый класс имеет конструктор **. – Sergi

0

После ob.println() сделать ob.close(); или ob.flush();.

Если вы не закрываете поток или не заливаете поток, в вашем файле ничего не будет напечатано.

0

Действительно, это не лучший дизайн, вы должны немедленно вносить изменения в файл по мере их создания. Причина этого в том, что если приложение закрывается по какой-либо другой причине (выключение питания, диспетчер задач, сбой и т. Д.), Вы не хотите потерять данные пользователя. Также было бы целесообразно автоматически создать резервную копию этого файла (например, скопировать его после запуска), поэтому, если вы повредите текущий сеанс, вы сможете вернуться.

Чтобы реализовать экономию, вы хотите использовать FileOutputStream какого-либо типа, но точная реализация будет сильно различаться в зависимости от формата, который вы хотите получить в потоке. Например, XML, JSON, текст плана, двоичная сериализация и т. Д. Все довольно просто, но вам нужно выбрать один :)

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