JTextArea保存到txt

时间:2014-09-24 16:43:15

标签: java save jtextarea

我正在制作一个需要保存用户输入的程序。所以我想知道如何将JTextArea保存到文本文件中,当你关闭并重新打开程序时,文本仍然在JTextArea中。

也很抱歉我的语法错误。

package main;


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.border.EtchedBorder;

public class main extends JFrame {

JLabel statusbar;

public main() {

initUI();
}

public final void initUI() {

JPanel panel = new JPanel();
statusbar = new JLabel("");

statusbar.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));

panel.setLayout(null);

JTextArea area1;

area1 = new JTextArea(90, 25);
area1.setBounds(20, 20, 200, 25);
area1.setBackground(Color.white);
area1.setForeground(Color.BLACK);
area1.setText("");
panel.add(area1);


add(panel);
add(statusbar, BorderLayout.SOUTH);

setTitle("Viskis");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);

}
class ButtonListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

JButton o = (JButton) e.getSource();
String label = o.getText();
statusbar.setText("");

} }

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

main ms = new main();
ms.setVisible(true);

new main();

}
});
}
}

3 个答案:

答案 0 :(得分:0)

以下是一些帮助您从Files读取和写入的辅助方法。在JavaDoc中查找getText()setText()以获取和设置JTextArea的文本。

我建议reading the SwingWorker tutorials并在SwingWorker中使用这些方法,以免在保存/读取文件时锁定GUI

/**
  * Writes a String text to a File specified by filename
  *
  * @param filename The filename/path of the File we would like to write the text to
  * @param text     The text to write to the File
  *
  */
public static void writeToFile(String filename, String text) {

    BufferedWriter writer = null; // This could go in a try-with-resources if you wanna get fancy

    try {
        writer = new BufferedWriter(new FileWriter(new File(filename))); // Open a File for writing
        writer.write(text); // write the text to the file
    } catch ( IOException e) {

    /* We could not open the File for writing, or could not write to the File */

    } finally {
        try {
            if (writer != null) {
                writer.close(); // we are done writing to the File, close the connection
            }
        } catch (IOException e) {

        /* We could not close the connection to the File */

        }
    }
}

/**
  * Reads all lines from a File specified by filename
  *
  * @param filename The filename/path of the File we would like to read text from
  *
  * @return         An list of Strings containing each line of the File
  */
public static List<String> readFromFile(String filename) {

    BufferedReader reader = null; // This could go in a try-with-resources if you wanna get fancy
    List<String> lines = new ArrayList<String>();

    try {

        reader = new BufferedReader(new FileReader(new File(filename))); // Open a File for writing
        while ((line = reader.readLine()) != null) {
            lines.add(line);
        }

    } catch (IOException e) {

    /* We could not open the File for reading, or could not read from the File */

    } finally {
        try {
            if (reader != null) {
                reader.close(); // we are done reading from the File, close the connection
            }
        } catch (IOException e) {

        /* We could not close the connection to the File */

        }
    }

    return lines;
}

答案 1 :(得分:0)

此代码适用于我的“nam&#39;作为当前日期和&#39;名称&#39; jTextField中的输入。

try {

         con=Connect.ConnectDB();         
         pst.execute();
         Date date=new Date();
         SimpleDateFormat sd=new SimpleDateFormat("dd-mm-yyyy-h-m-s");
         String nam= sd.format(date);
         String name=CaseNoField.getText();
         CaseNoField.setText("");

        FileWriter writer=new FileWriter( "C:\\path"+name+"("+nam+")"+".txt");      
        BufferedWriter bw=new BufferedWriter( writer );
        JCaseArea.write( bw );
        bw.close();
        JCaseArea.setText("");
        JCaseArea.requestFocus();

            JOptionPane.showMessageDialog(null, "Case Saved");
    }
    catch(Exception e){

        JOptionPane.showMessageDialog(null, e);


    }

答案 2 :(得分:0)

不建议在摇摆线程上写入和读取文件。使用mvc模式。使用绑定到组件的字段创建数据模型。创建适配器以更新模型和写入文件 然后,您的组件将始终与您的模型保持同步

使用model来编写数据(使用适配器),read文件将使用适配器更新模型

例如,Focus监听器将调用适配器来执行该任务。或者,如果修改了对象,则可以使用obseevee模式。