如何在java中的txt文件中编写和读取数据

时间:2014-09-01 07:25:32

标签: java swing io

我是SO的新手,我在java中设计了一个表单,我添加了三个按钮提交清除显示记录。我需要获取提交事件的数据并将其传递给txt文件,我想在显示记录按钮点击事件上显示整个记录。我需要你们快速解决,我的时间已经不多了。这是我的代码:

import java.awt.*;  //import older gui library for content pane
import javax.swing.*;   //import newer gui library for labels, textfields, and button
import java.awt.event.*; //import gui event action library
import javax.swing.JRadioButton;

public class CustomerRecord extends JFrame implements ActionListener {

    // declare labels used on GUI screen
    private JLabel labelId, labelName, labelGender,labelcategory, labelPItem, labeldiscount;
    private JLabel labelError, labelRegistration; 
    private JTextField textId, textName, textGender, textState, textcategory, textPItem, textdiscount;
    // declare button used on GUI screen
    private JButton submitButton, clearButton, readButton;
    final JRadioButton jRadioMale = new JRadioButton("Male");
    final JRadioButton jRadioFemale = new JRadioButton("Female");
    // declare content pane
    private Container contentPane;

    public CustomerRecord() {
        createGUI();
    } // ends  constructor

    private void createGUI() {
        try {
            // get content pane and set the layout to null
            contentPane = getContentPane();
            contentPane.setLayout(null);    //free-form layout
            setFont(new Font("TimesRoman", Font.ITALIC, 14));

            // create the name label
            labelId = new JLabel(); //instantiate new JLabel
            labelId.setText("C.ID");    //set label text to name
            labelId.setLocation(38, 10);    //set location of JLabel
            labelId.setSize(200, 25);   //set size of JLabel
            labelId.setForeground(Color.BLACK);//set initial background color
            contentPane.add(labelId);   //add JLabel to content pane

            // create the name text box
            textName = new JTextField();    //instantiate new JTextField
            textName.setText("");   //clear JTextField
            textName.setToolTipText("Please enter ID");
            textName.setLocation(75, 10);   //set location of JTextFfield
            textName.setSize(200, 25);   //set size of JTextField
            contentPane.add(textName); //add jextfield to content pane

            // create the address label
            labelName = new JLabel();
            labelName.setText("Name:");
            labelName.setLocation(23, 50);
            labelName.setSize(80, 25);
            labelName.setForeground(Color.BLACK);
            contentPane.add(labelName);

            // create the address text box
            textName = new JTextField();
            textName.setText("");
            textName.setToolTipText("Please type in full name");
            textName.setLocation(75, 50);
            textName.setSize(300, 25);
            contentPane.add(textName);
            labelGender = new JLabel();
            labelGender.setText("Gender");
            labelGender.setLocation(30, 90);
            labelGender.setSize(300, 25);
            labelGender.setForeground(Color.BLACK);
            contentPane.add(labelGender);
            textGender = new JTextField();
            textGender.setText("");
            textGender.setToolTipText("M/F");
            textGender.setLocation(75, 90);
            textGender.setSize(130, 25);
            contentPane.add(textGender);
            labelcategory = new JLabel();
            labelcategory.setText("Category");
            labelcategory.setLocation(18, 170);
            labelcategory.setSize(300, 25);
            labelcategory.setForeground(Color.BLACK);
            contentPane.add(labelcategory);
            textcategory = new JTextField();
            textcategory.setText("");
            textcategory.setToolTipText("Item Type (Grocery)");
            textcategory.setLocation(75, 170);
            textcategory.setSize(130, 25);
            contentPane.add(textcategory);
            labelPItem = new JLabel();
            labelPItem.setText("Total Item");
            labelPItem.setLocation(15, 210);
            labelPItem.setSize(250, 25);
            labelPItem.setForeground(Color.BLACK);
            contentPane.add(labelPItem);
            textPItem = new JTextField();
            textPItem.setText("");
            textPItem.setToolTipText("Purchased items must be between start with 1 or 70");
            textPItem.setLocation(75, 210);
            textPItem.setSize(130, 25);
            contentPane.add(textPItem);
            labeldiscount = new JLabel();
            labeldiscount.setText("Discount");
            labeldiscount.setLocation(18, 250);
            labeldiscount.setSize(300, 25);
            labeldiscount.setForeground(Color.BLACK);
            contentPane.add(labeldiscount);
            textdiscount = new JTextField();
            textdiscount.setText("");
            textdiscount.setToolTipText("Entered Value must be containing ' % '");
            textdiscount.setLocation(75, 250);
            textdiscount.setSize(130, 25);
            contentPane.add(textdiscount);
            submitButton = new JButton();
            submitButton.setText("Submit");
            submitButton.setToolTipText("Click \"submit \" when the form is completely filled out");
            submitButton.setLocation(125, 450);
            submitButton.setSize(100, 30);
            contentPane.add(submitButton);
            submitButton.addActionListener(this);
            readButton = new JButton();
            readButton.setText("Show Records");
            readButton.setToolTipText("Click Show Record if you want to check record");
            readButton.setLocation(225, 350);
            readButton.setSize(200, 30);
            contentPane.add(readButton);
            readButton.addActionListener(this);

            clearButton = new JButton();
            clearButton.setText("Clear");
            clearButton.setToolTipText("Click \"clear \" when you want to clear the form");
            clearButton.setLocation(250, 450);
            clearButton.setSize(100, 30);
            contentPane.add(clearButton);
            clearButton.addActionListener(this);

            // create the error label
            labelError = new JLabel();
            labelError.setText("Please correct items in red");
            labelError.setLocation(150, 500);
            labelError.setSize(190, 25);
            labelError.setForeground(Color.RED);
            labelError.setVisible(false);
            contentPane.add(labelError);

            // create the registration label
            labelRegistration = new JLabel();
            labelRegistration.setText("Thank you for your entry.");
            labelRegistration.setLocation(145, 500);
            labelRegistration.setSize(190, 25);
            labelRegistration.setForeground(Color.BLACK);
            labelRegistration.setVisible(false);
            contentPane.add(labelRegistration);

            setTitle("Customer Form");  //set window title
            setSize(475, 600); //set window size
            setVisible(true);
        } catch (Exception e) {
        }
    }// ends creatGUI method.

    public static void main(String args[]) {
        CustomerRecord application = new CustomerRecord();
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }// ends main

    public void actionPerformed(ActionEvent event) {
        try {
            if (event.getActionCommand().equals("Submit")) {

                if (checkID() & checkName() & checkGender() &  check() & checkPItem() & checkdiscount()) {
                    labelRegistration.setVisible(true);
                    labelError.setVisible(false);    
                    submitButton.removeActionListener(this); 
                    clearButton.removeActionListener(this);  
                } else {
                    labelError.setVisible(true); 
                    labelRegistration.setVisible(false); 
                }
            } if (event.getActionCommand().equals("Clear")) 
                {
                textName.setText("");
                textName.setText("");
                textGender.setText("");
                textState.setText("");
                textcategory.setText("");
                textPItem.setText("");
                textdiscount.setText("");

                labelError.setVisible(false);
                labelRegistration.setVisible(false);
                labelId.setForeground(Color.BLACK);
                labelName.setForeground(Color.BLACK);
                labelGender.setForeground(Color.BLACK);
                labelcategory.setForeground(Color.BLACK);
                labelPItem.setForeground(Color.BLACK);
                labeldiscount.setForeground(Color.BLACK);

            }
        } catch (Exception e) { }
    }
    private boolean checkID() {
        if (textName.getText().length() == 0) {
            labelId.setForeground(Color.RED);   //name is not correct
            return false;
        } else {
            labelId.setForeground(Color.BLACK); //name is correct
            return true;
        }
    } 
    private boolean checkName() {
        if (textName.getText().length() < 5) {
            labelName.setForeground(Color.RED); 
            return false;
        } else {
            labelName.setForeground(Color.BLACK);
            return true;
        }
    } 

    private boolean checkGender() {
        if (textGender.getText().length() == 0) {
            labelGender.setForeground(Color.RED);
            return false;
        } else {
            labelGender.setForeground(Color.BLACK); 
            return true;
        }
    } 
    private boolean check() {
        try {

            if (textcategory.getText().length() == 5) {
                labelcategory.setForeground(Color.BLACK);
                return true;
            } else {
                labelcategory.setForeground(Color.RED); 
                return false;
            }
        } catch (Exception e) {
            labelcategory.setForeground(Color.RED);     
            return false;
        }
    } 
    private boolean checkPItem() {

            if (textPItem.getText().startsWith("1") || textPItem.getText().startsWith("70")) 
            {
                labelPItem.setForeground(Color.BLACK);
                return true;
            } else {
                labelPItem.setForeground(Color.RED);    
                return false;
            }      
    } 
    private boolean checkdiscount() {
        if (textdiscount.getText().contains("%"))
        {
            labeldiscount.setForeground(Color.BLACK);
                return true;
        } else
        {
            labeldiscount.setForeground(Color.RED); 
                return false;
        }
    }   
}

2 个答案:

答案 0 :(得分:1)

首先让我指出一些有缺陷的(但不是致命的)设计。您的所有checkXxx()方法都处理从字段中获取文本的过程。我会改变它们接受字符串作为参数。原因是您需要actionPerformed范围内的文本字段中的字符串值,以便将它们保存到文本文件中。

  

我需要获取有关提交事件的数据并将其传递给txt文件

您应该使用FileWriter并使用此构造函数

  

public FileWriter(String fileName, boolean append) throws IOException -
  在给定文件名的情况下构造一个FileWriter对象,该文件名带有一个布尔值,指示是否附加写入的数据。

将允许您使用其append方法之一附加到该文件。

  

我希望在节目记录按钮点击事件中显示整个记录

不确定您是否想要阅读所有记录或根据名称或某事读取单个记录。对于前者,文本组件使用read()方法将整个文档读取到文本组件(比如文本区域)。对于后者,您将需要逐行读取并检查该行的某些部分是否与您要匹配的数据匹配。这是基本的东西。您可以在Basic I/O了解更多信息。例如,类似的(假设您的记录/行是逗号分隔值):

BufferedReader reader = new Bufferedreader(new FileReader(new File("file")));
String line = null;
while ((line = reader.readLine()) != null) {
    String[] tokens = line.split(",");
    String firstName = tokens[0].trim();
    if (firstName.equals(firstNameFieldtext)) {
        // use the tokens to populate the fields.
        break;
    }
}
reader.close();

上面的代码只是逐行读取,将每一行拆分成一个数组。它检查第一个标记以查看名称是否与字段值匹配。如果是,则可以使用数组中的值来填充字段。

如果您想将整个文件读取到文本区域,您可以简单地将相同的BufferedReader传递给read方法,如textArea.read(reader, null);

答案 1 :(得分:1)

在我提供答案之前,我已经错误地修改了一些错误的代码。

请检查我纠正的区域。

您的代码:

    // create the name text box
        textName = new JTextField();    //instantiate new JTextField
        textName.setText("");   //clear JTextField
        textName.setToolTipText("Please enter ID");
        textName.setLocation(75, 10);   //set location of JTextFfield
        textName.setSize(200, 25);   //set size of JTextField
        contentPane.add(textName); //add jextfield to content pane

修改后的代码:

    // create the name text box
        textId = new JTextField();    //instantiate new JTextField
        textId.setText("");   //clear JTextField
        textId.setToolTipText("Please enter ID");
        textId.setLocation(75, 10);   //set location of JTextFfield
        textId.setSize(200, 25);   //set size of JTextField
        contentPane.add(textId); //add jextfield to content pane

============================ 然后我为读取文件和写入文件

定义了新的两种方法

这是写入文件

      private void writeToFile(String list) throws IOException{
///
                File f = new File("E:\\test1.txt");
                System.out.println(f);
                FileWriter fw = new FileWriter(f,true);
                System.out.println(fw);
                try{
                    BufferedWriter bw = new BufferedWriter(fw);
                    System.out.println(bw);
                    bw.newLine();
                    bw.write(list);
                    bw.flush();
                    bw.close();
                }
                catch(Exception e){
                    System.out.println(e);
                }
                ///
}

这是读取文件

private void readFile(){

     File f = new File("E:\\test1.txt");
try{
       FileReader fr = new FileReader(f);
       BufferedReader br = new BufferedReader(fr);
       while(br.ready()){
       System.out.println(br.readLine());
        }
}catch(Exception e){
    System.out.println(e);
}
}

然后在actionPerforemed(ActionEvent e)中添加了新的if语句来处理来自&#34; Show Records&#34;没有添加它的按钮。在它旁边我调用readFile(),它将从读取文件中打印所有行。(这个读取文件是你要写的文件。)

         //Newly added event for Show Records button. 

        if (event.getActionCommand().equals("Show Records")) {
           readFile();
        }

然后在actionPerforemed(ActionEvent e)和if语句中提交按钮

添加了以下代码。

public void actionPerformed(ActionEvent event) {
    try {
        if (event.getActionCommand().equals("Submit")) {

            if (checkID() & checkName() & checkGender() & check() & checkPItem() & checkdiscount()) {
                labelRegistration.setVisible(true);
                labelError.setVisible(false);
                //concatnating the collected data to be written.
                String toBewrite = textId.getText() + "," + textName.getText();
                toBewrite = toBewrite + "," + textGender.getText() + "," + textcategory.getText();
                toBewrite = toBewrite + "," + textPItem.getText() + "," + textdiscount.getText();
                ///calling the writeToFile method where the relavent data to be updated to the file.
                writeToFile(toBewrite);
                ////
                submitButton.removeActionListener(this);
                clearButton.removeActionListener(this);
            } else {
                labelError.setVisible(true);
                labelRegistration.setVisible(false);
            }
        }
        if (event.getActionCommand().equals("Clear")) {
            textName.setText("");
            textName.setText("");
            textGender.setText("");
            textState.setText("");
            textcategory.setText("");
            textPItem.setText("");
            textdiscount.setText("");

            labelError.setVisible(false);
            labelRegistration.setVisible(false);
            labelId.setForeground(Color.BLACK);
            labelName.setForeground(Color.BLACK);
            labelGender.setForeground(Color.BLACK);
            labelcategory.setForeground(Color.BLACK);
            labelPItem.setForeground(Color.BLACK);
            labeldiscount.setForeground(Color.BLACK);

        }
        //Newly added event for Show Records button.
        if (event.getActionCommand().equals("Show Records")) {
            readFile();
        }
    } catch (Exception e) {
    }
}