我想创建一个更像 NotePad 的程序。当您在JTextArea
中输入文字并点击另存为时,程序将在工作区内创建一个文本文件,其中的文本在JTextArea
内输入。< / em>问题是当我单击保存时,程序可以创建一个文本文件,但在textarea中键入的文本不会保存在创建的文本文件中。文本文件的名称为"Text"
。我使用getText()
方法获取TextArea
内的文本。
这是该计划:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
public class TextAreaWithMenus extends JFrame implements ActionListener {
JTextArea area;
JMenuBar menubar;
JMenu option;
JMenuItem menuitem;
File file;
FileWriter fwriter;
PrintWriter pwriter;
String order[] = {"Save as","Edit"};
public TextAreaWithMenus() {
setSize(new Dimension(500,500));
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
setLayout(null);
area = new JTextArea();
menubar = new JMenuBar();
option = new JMenu("File");
for(String call : order) {
menuitem = new JMenuItem(call);
option.add(menuitem);
menuitem.addActionListener(this);
}
this.add(menubar);
menubar.setBounds(0,0,500,30);
menubar.add(option);
this.add(area);
area.setBounds(0,30,500,470);
area.setLineWrap(true);
area.setWrapStyleWord(true);
try{
file = new File("C://Users/LunaWorkspace/TestProject/src/Text");
fwriter = new FileWriter(file);
pwriter = new PrintWriter(fwriter,true);
}catch(Exception e) {}
setVisible(true);
}//END OF CONSTRUCTOR
public void save() {
try {
if(!file.exists()) {
try {
file.createNewFile();
pwriter.print(area.getText());
System.out.println(area.getText());
System.out.println("Saved complete");
}catch(Exception ef) {
ef.printStackTrace();
System.err.print("Cannot Create");
}
}else if(file.exists()) {
pwriter.print(area.getText());
System.out.println(area.getText());
System.out.println("Overwrite complete");
}
} catch(Exception exp) {
exp.printStackTrace();
System.err.println("Cannot Save");
}
}
public void actionPerformed(ActionEvent ac) {
String act = ac.getActionCommand();
if(act.equals("Save as")) {
save();
}else if(act.equals("Edit")) {}
}
public static void main (String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() { new TextAreaWithMenus();} });
}
}
答案 0 :(得分:1)
完成后,您应该使用pwriter.close()
关闭作家。否则,文本可能没有被刷新,也没有任何内容被写入。
答案 1 :(得分:1)
您需要在缓存保存时调用flush。这有效:
public void save() {
try {
if (!file.exists()) {
try {
file.createNewFile();
pwriter.print(area.getText());
System.out.println(area.getText());
System.out.println("Saved complete");
} catch (Exception ef) {
ef.printStackTrace();
System.err.print("Cannot Create");
}
} else if (file.exists()) {
pwriter.print(area.getText());
System.out.println(area.getText());
System.out.println("Overwrite complete");
}
} catch (Exception exp) {
exp.printStackTrace();
System.err.println("Cannot Save");
} finally {
pwriter.flush();
}
}
答案 2 :(得分:0)
在构造函数中创建writer并在save方法中重复写入是不好的做法。创建一个新文件并写入旧流可能会导致意外行为。
在save方法中打开,写入和关闭流/写入器。
然后没有必要检查文件是否已经存在。 新的FileWriter(文件)将覆盖现有文件。