【问题标题】:Trying to get BufferedWriter to save textarea to txt file试图让 BufferedWriter 将 textarea 保存到 txt 文件
【发布时间】:2020-01-10 19:01:22
【问题描述】:

我正在尝试构建一个日历应用程序并使用我标记为笔记的备忘录部分。我有一个添加按钮来添加新注释,我希望它添加到路径中的当前文件中。我正在尝试使用 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]

【问题讨论】:

    标签: java swing jtextarea bufferedwriter


    【解决方案1】:

    这里:

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

    method 的 javadoc:

    返回 Object 参数的字符串表示形式。

    这并不符合您的预期。这就像调用 textArea.toString() ... 再次:不会为您提供 textArea 的字符串 content

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

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

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

    【讨论】:

    • 我认为 String.valuOf 是我的问题。我会尝试 textArea.getText(...) 并让它工作。我也没有意识到我没有包括我的整个方法。除了要写入文件的添加按钮外,我确实有 GUI 工作。我确实执行单元测试,因为我读到它是测试代码段的有效方法。我有一两本关于 java 的书,但它们似乎没有涵盖很多深入的领域,但我希望能变得更好
    • @skydawg 单元测试很棒。但它开始于:什么是单位?专业提示:单位应尽可能小。任何大到足以自己理解的东西都应该是它自己的“单元”。因为只有这样才能单独测试!
    【解决方案2】:

    JTextArea 扩展 JTextComponent。所以你有一个名为write(java.io.Writer writer) 的方法。

    也就是说,您可以在代码中调用textArea.write(writer)

    【讨论】:

    • 这很整洁 ;-)
    猜你喜欢
    • 1970-01-01
    • 2019-05-27
    • 2012-04-14
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    相关资源
    最近更新 更多