java - 尝试让 BufferedWriter 将文本区域保存到 txt 文件

标签 java swing jtextarea bufferedwriter

我正在尝试构建一个日历应用程序并使用我标记为注释的备忘录部分。我有一个添加按钮来添加新注释,我希望将其添加到路径中的当前文件中。我正在尝试使用 BufferWriter 来执行此操作。我附加了 newNote() 方法,该方法打开一个新框架并允许新文本。我想我正在尝试将新文本附加到当前文件中,但我看到的示例表明可以这样做。 txt 文件的输出不是我所期望的。我认为这是由于调用 textArea 对象,并且它正在拉取对象的数据而不是 textArea 内的输入。我对 Java 有点陌生,做这个项目是为了个人用途,而不是一个类。任何帮助和见解将不胜感激。这也是我第一次在论坛上发帖,所以如果有更好的方法,请告诉我。

newNote() 方法。

public static void newNote() {//opens new frame to create a new note
    //variables for the new window
    JFrame noteFrame = new JFrame("New Note");
    JPanel notePanel = new JPanel();
    JButton cancelButton = new JButton("Cancel");
    JButton addButton = new JButton("Add");
    JTextArea textArea = new JTextArea("Add notes here");
    //creates and positions buttons
    addButton.setBounds(150,330,65,40);
    addButton.addActionListener(new ActionListener() {//writes contents to a txt file when Add is clicked
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            BufferedWriter writer = null;
            try {
                writer = new BufferedWriter((new FileWriter("/home/skydawg/pCloudDrive/Documents/test/Log.txt", true)));

                writer.write(String.valueOf(textArea));
                writer.newLine();
                writer.flush();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } finally {
                if (writer != null) try {
                    writer.close();
                } catch (IOException ioe2) {
                    // just ignore it
                }
                noteFrame.dispose();//closes the frame
            }}
    });

输出到txt文件

newjavax.swing.JTextArea[,10,10,280x295,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@13e59af,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],disabledTextColor=javax.swing.plaf.ColorUIResource[r=218,g=218,b=218],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],selectionColor=javax.swing.plaf.ColorUIResource[r=134,g=108,b=186],colums=0,columWidth=0,rows=0,rowHeight=0,word=true,wrap=true]

最佳答案

这里:

writer.write(String.valueOf(textArea));

javadoc method :

Returns the string representation of the Object argument.

这并没有达到您期望的效果。这就像调用 textArea.toString() ...同样:不会为您提供 textArea 的字符串 content

相反,您需要调用 textArea.getText(),并将其写入您的文件。

除此之外:你不应该把这么多东西放在一起。含义:编写一个实用程序类,仅将一些文本写入文件。分别测试一下。只有当该部分工作时,您才可以将 GUI 放在它周围。您的方法是:将所有内容放在一起,立即测试所有。这意味着你要从一个问题跑到下一个问题。不要那样做。将您的问题分成许多小部分,并认真思考“我如何单独解决和测试每个部分”!

最后,正如您刚才所看到的:GUI 编程和 GUI 组件复杂。试图通过反复试验来学习这些东西是一种非常低效的策略!阅读一本好书或教程确实更好(请参阅for example)。从工作示例开始,而不是把 5 个对您来说都是新的不同东西放在一起!最重要的是:每次你使用一个你以前没有学过的new类时:花时间阅读相应的javadoc。从上到下!你可以预先投入这些时间,或者你可以花 1小时不了解发生了什么,然后投入时间。

关于java - 尝试让 BufferedWriter 将文本区域保存到 txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59687571/

相关文章:

java - 制作一个可以从另一个类打印的文本区域

java - 带有事件的 Android CalendarView

java - 验证 JGoodies Binding 中的缓冲值

java - 按条件用 JSON 定义组或元素填充 ArrayList<ArrayList<Object>>(尝试在 Android 中为可扩展列表创建数据)

java - 有没有办法让 JList 的每个项目具有不同的宽度?

java - 如何在java中使用GridBagLayout和box?

Java:显示从另一个类中的方法创建的数组

java - 点击通过 JTextArea?

java - Hazelcast 中的未知日志跟踪

java - 搜索引擎提供带有结果的 xml 文件