2013-12-20 53 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 extends JFrame **)。 **每个类都有一个构造函数**。 – Sergi

0

ob.println()后做ob.close();ob.flush();

如果您不关闭流或刷新流,则不会在您的文件中打印任何内容。

0

真的,这不是最好的设计,你应该立即在文件中写入更改。原因是,如果应用程序因任何其他原因而关闭(断电,任务管理器死机,崩溃等),那么您不希望丢失用户的数据。它也值得自动备份该文件(例如在启动后复制它),所以如果以某种方式破坏当前会话,则可以恢复。

要实际执行保存,您希望使用某种类型的FileOutputStream,但具体实现会因流的数据格式而异。例如,XML,JSON,计划文本,二进制序列化等都相当容易,但你需要选择一个:)