DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   Java (http://www.daniweb.com/forums/forum9.html)
-   -   File I/0 (http://www.daniweb.com/forums/thread160463.html)

christiangirl Dec 2nd, 2008 7:58 pm
File I/0
 
This program is all working except when a user chooses the same file as before it needs to show both orders in the file but it is only showing the latest one.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

/**
 * Program that allows user to select a meal.
 * Includes sides, drink, and main entree
 * Writes users order to user specified file.
 * @author Kimberlie
 * @version 12/4/08
 */
public class MealBuilder {

    /*
    * Main
    * Sets up frame
    * @param args not used
    */
    public static void main(String[] args)
    {
        EventQueue.invokeLater(
          new Runnable()
          {
                public void run()
                {
                  MealBuilderFrame frame = new MealBuilderFrame();
                  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  frame.setVisible(true);
                }
          });
    }

}

/*
 * MealBuilderFrame class
 * extends JFrame
 * Sets up frame, sets size and title
 * Declares and adds panel
 */
class MealBuilderFrame extends JFrame
{
    /*
    * MealBuilderFrame constructor
    * @param none
    */
    public MealBuilderFrame()
    {
      this.setTitle("Meal Builder");
      this.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

      MealBuilderPanel panel = new MealBuilderPanel();
      this.add(panel);
    }

    final static int DEFAULT_WIDTH = 550;
    final static int DEFAULT_HEIGHT = 400;
}

/*
 * MealBuilderPanel class
 * extends JPanel
 * Sets up panel with components
 */
class MealBuilderPanel extends JPanel
{
    /*
    * MealBuilderPanel constructor
    * @param none
    */
    public MealBuilderPanel()
    {
        this.setLayout(new BorderLayout());

        //ButtonGroup for radio buttons
        ButtonGroup entree = new ButtonGroup();
        ButtonGroup drinkGroup = new ButtonGroup();

        //North
        this.add(new JLabel("Server: Kimberlie Davis"), BorderLayout.NORTH);

        //West
        this.add(new JLabel("          "), BorderLayout.WEST);

        //Center
        JPanel centerPanel = new JPanel(new GridLayout(1,4));
        this.add(centerPanel, BorderLayout.CENTER);

        //south
        JPanel southPanel = new JPanel();
        this.add(southPanel, BorderLayout.SOUTH);
        JButton submit = new JButton("Order");
        southPanel.add(submit);

        //Box
        Box centerBox = Box.createVerticalBox();
        Box centerBox2 = Box.createVerticalBox();
        Box centerBox3 = Box.createVerticalBox();

        //Adding everything to centerPanel
        centerPanel.add(centerBox, 1, 0);
        centerPanel.add(centerBox2);
        centerPanel.add(centerBox3);

        mainEntreeBox = new JRadioButton[5];
        drinkBox = new JRadioButton[10];
        sideBox = new JCheckBox[6];

        //Setting up choices
        String[] drink = {"Root beer", "Sprite", "Coffee", "Hot Chocolate", "Whie Chocolate", "Jarritos", "Dr. Pepper", "Shake", "Tea", "Coke"};
        String[] side = {"Salad", "Soup", "French Fries", "Potato salad", "Apple sauce", "Fruit"};
        String[] mainEntree = {"Hamburger", "Cheeseburger", "Hotdog", "Ham sandwhich", "Turkey sandwhich"};

        JLabel chooseEntree = new JLabel("Choose your main entree:    ");
        JLabel chooseSide = new JLabel("Choose your sides:");
        JLabel chooseDrink = new JLabel("Choose your drink:");

        //Main Entree
        centerBox.add(chooseEntree);
        for(int i = 0; i < 5; i++)
        {
            mainEntreeBox[i] = new JRadioButton(mainEntree[i]);
            entree.add(mainEntreeBox[i]);
            centerBox.add(mainEntreeBox[i]);
        }

        //Sides
        centerBox2.add(chooseSide);
        for(int i = 0; i < 6; i++)
        {
            sideBox[i] = new JCheckBox(side[i]);
            centerBox2.add(sideBox[i]);
        }

        //Drink
        centerBox3.add(chooseDrink);
        for(int i = 0; i < 10; i++)
        {
            drinkBox[i]= new JRadioButton(drink[i]);
            centerBox3.add(drinkBox[i]);
            drinkGroup.add(drinkBox[i]);
        }

        //Declaring and adding ActionListener
        SubmitAction action = new SubmitAction();
        submit.addActionListener(action);
    }

    private class SubmitAction implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
          String fileName = new String();
          file = JOptionPane.showInputDialog(null, "Enter the file name to store your order to:");

          try
          {
            //writeTo = new File(file + ".txt");
            if(fileChosen == false)
            {
                writer = new BufferedWriter(new FileWriter(file + ".txt"));
                fileName = file;
                fileChosen = true;
            }

            else
            {
                if(!file.equals(fileName))
                {
                    writer = new BufferedWriter(new FileWriter(file + ".txt"));
                    fileName = file;
                }

            }

            int i, a, b;

            writer.write("Entree chosen:");
            for(i = 0; i < 5; i++)
            {
              //Write entree chosen to file
                if(mainEntreeBox[i].isSelected())
                {
                    writer.write(mainEntreeBox[i].getText());
                    writer.newLine();
                }
            }

              //write drink chosen to file
              writer.write("Drink chosen:");
              for(a = 0; a < 10; a++)
              {
                  if(drinkBox[a].isSelected())
                  {
                    writer.write(drinkBox[a].getText());
                    writer.newLine();
                  }
              }

              //write sides chosen to file
              writer.write("Side(s) chosen:");
              writer.newLine();
              for(b = 0; b < 6; b++)
              {
                  if(sideBox[b].isSelected())
                  {
                    writer.write(sideBox[b].getText());
                    writer.newLine();
                  }
              }
              writer.close();
            }

            catch(IOException e)
            {
                JOptionPane.showMessageDialog(null, "Error: unable to process order.\nPlease try again");
            }
          }
    }
    //datafields
    JRadioButton[] mainEntreeBox;
    JRadioButton[] drinkBox;
    JCheckBox[] sideBox;

    String file;
    File  writeTo;
    BufferedWriter writer;

    boolean fileChosen = false;
}

peter_budo Dec 2nd, 2008 8:05 pm
Re: File I/0
 
If you want to use same file without loosing original content then you need to use append() method inherited from Writer class

christiangirl Dec 2nd, 2008 8:10 pm
Re: File I/0
 
Do I just do it like this? writer.append(fileName + ".txt");
I tried it like that in my if else statement for if the file name is the same as before, and that didnt work.

peter_budo Dec 2nd, 2008 8:51 pm
Re: File I/0
 
Ah bugger, seems like I'm little rusty on basic file I/O. Forget append.
In your case you need to only use different FileWritter constructor FileWriter(File file, boolean append)
writer = new BufferedWriter(new FileWriter(file + ".txt", true));

christiangirl Dec 2nd, 2008 8:59 pm
Re: File I/0
 
thanks! That worked! I really appreciate your help, I was really having trouble with File I/O but I think I get how to do it now!


All times are GMT -4. The time now is 1:59 am.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC