逐行写入文本文件

时间:2015-01-13 06:09:10

标签: java swing file-io jtextarea filewriter

我试图从jtextarea编写文本并将其保存为文本文件。但是在运行程序时,文本写入一行而不是逐行写入。

例如:

我的意见:

abcd
eghi
asdasddkj

但是得到像这样的输出

abcdeghiasdasddkj

这是我的代码:

private void jMenuItem12ActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        // TODO add your handling code here:
        String text = jTextArea1.getText();
        File file = new File("D:/sample.txt");  
        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);
        PrintWriter pl=new PrintWriter(bw);
        pl.println(text);
        System.out.println(text);
       pl.close();
    } catch (IOException ex) {
        Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);

    }
}

2 个答案:

答案 0 :(得分:4)

  

文本写在一行不是逐行写

Document只存储" \ n"表示新的行字符串。新行字符串因您使用的操作系统而异。有些编辑很聪明,可以识别多个新的字符串字符串,有些则不是这样,你可以获得单行。

  

我正在尝试从jtextarea写入文本,并将其保存为文本文件

不要自己做IO。

而是使用write(...) API提供的JTextArea方法。

答案 1 :(得分:2)

camickr发布的答案是一个完美的解决方案。但是不需要使用开始和结束偏移方法。 JTextArea.wtite()将处理它。它甚至可以为你处理行分隔符。

对于所需的输出,你的actionPerformed()应该是这样的..

but1.addActionListener(new ActionListener() 
    {
        @Override
            public void actionPerformed(ActionEvent e) {

                String text = jta.getText();
                File file = new File("D:/sample.txt");  
                FileWriter fw;
                try
                {
                    fw = new FileWriter(file.getAbsoluteFile());
                    BufferedWriter bw = new BufferedWriter(fw);
                    jta.write(bw);

                }
                catch (Exception e1) 
                {                       
                    e1.printStackTrace();
                }

            }
        });