java - 无法使用 FileWriter 和 Printwriter 在文本文件中写入文本

标签 java jtextarea filewriter printwriter

我想创建一个更像记事本的程序。当您在 JTextArea 内键入文本时并单击另存为程序将在工作区中创建一个文本文件,其中的文本在 JTextArea 中键入。问题是,当我单击“保存”时,程序可以创建一个文本文件,但在文本区域中键入的文本不会保存在创建的文本文件中。文本文件的名称"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();} });
    }
}

最佳答案

当保存正在缓冲时,您需要调用刷新。这有效:

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();
    }
}

关于java - 无法使用 FileWriter 和 Printwriter 在文本文件中写入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26888655/

相关文章:

java - 在 Eclipse 中重命名重构

java - JTextArea 与 JPanel 内的 JScrollPane 不能很好地配合

java - 如何在没有按钮的情况下主动(立即)检查 JFrame 表单中文本框的值?

java - 如何使用循环清除 jframe 的所有文本字段?

java - 使用 FileWriter Java 写入一个已经存在的文件

java - 如何使用java将文件从windows文件夹写入unix文件夹

java - 文件写入器问题 - Java Android

java - 使用Slick2D,如何在游戏过程中更改分辨率?

java - 如何在另一个java程序中运行java可执行jar

java - 在 switch 语句中使用游标 (SQLite) 移动时出现 NullPointerException