在从 JTextArea 获取文本的文档中保存文件时如何修复新行

How to fix the New Line when saving file in a document taking text from a JTextArea

import java.awt.BorderLayout;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Formatter;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class FileDemonstrationJFileChooser extends JFrame {
    private JTextArea outputArea;
    private JScrollPane scrollPane;
    JFileChooser fileChooser = new JFileChooser();

    public FileDemonstrationJFileChooser() {
        // TODO Auto-generated constructor stub
        super("Testing class file");
        outputArea = new JTextArea();
        scrollPane = new JScrollPane(outputArea);
        add(scrollPane, BorderLayout.CENTER);
        setSize(400, 400);
        setVisible(true);

        analyzePath();

        if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            // save to file
            String toSave = outputArea.getText();
            try {
                Formatter writer = new Formatter( new File(file+".txt"));
                writer.format(toSave); //Problems here occurs
                writer.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            JOptionPane.showMessageDialog(this,
                    "Message saved.(" + file.getName() + ")", "File Saved",
                    JOptionPane.INFORMATION_MESSAGE);

        }
    }

    private File getFileOrDirectory() {

        fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        int result = fileChooser.showOpenDialog(null);
        if (result == JFileChooser.CANCEL_OPTION) {
            System.exit(1);
        }
        File fileName = fileChooser.getSelectedFile();
        if ((fileName == null) || (fileName.getName().equals(""))) {
            JOptionPane.showMessageDialog(this, "Invalid name", "Invalid name",
                    JOptionPane.ERROR_MESSAGE);
            System.exit(1);
        }
        return fileName;
    }

    private void analyzePath() {
        File name = getFileOrDirectory();
        if (name.exists()) {
            outputArea.setText(String.format(
                    "%s%s\n%s\n%s\n%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s", name
                            .getName(), " exists", (name.isFile() ? "is a file"
                            : "is not a file"),
                    (name.isDirectory() ? "is a directory"
                            : "is not a directory"),
                    (name.isAbsolute() ? "is absolute path"
                            : "is not absolute path"), "Last modified: ", name
                            .lastModified(), "Length: ", name.length(),
                    "Path: ", name.getPath(), "Absolute path: ", name
                            .getAbsolutePath(), "Parent: ", name.getParent()));

            if (name.isDirectory()) {
                String[] directory = name.list();
                outputArea.append("\n\nDirectory contents:\n");

                for (String directoryName : directory) {
                    outputArea.append(directoryName + "\n");
                }
            }
        } else {
            JOptionPane.showMessageDialog(this, name + " does not exist.",
                    "Error", JOptionPane.ERROR_MESSAGE);
        }

    }
}

我的代码用JFileChooser写在一个文件中并保存在硬盘中。但是在写入文件的时候出现问题,没有取新行。它将整个文本区域的文本保存在一行中。如何修复??

这里,当我保存文件时,它仅将其内容保存在一行中,而不是像 JTextArea 中那样。也就是说,新行不会出现。它将所有内容保存在一行中。那我该如何解决呢??

"\n" 适用于控制台输出但不适用于文件。 使用 "\r\n"(适用于 windows)然后保存它应该可以解决问题。

不要使用 \n,而是使用 System.getProperty("line.separator")System#lineSeparator 自 Java 7 以来可用,以获得取决于平台的正确行分隔符 (Windows, *nix).

换行符可以很容易地插入 \r\n 是 windows 回车 return。所以这只适用于 windows。您可以检查 os 您的 运行,而不是对每个 os 的回车 return 进行硬编码,例如 windows、linux、....

但请坚持使用另一种更简单的方法。只需将 System.getProperty("line.separator") 附加到您写入文件的字符串,它会自动为您的 OS.

添加回车符 return

希望对您有所帮助!

A Document只会存储“\n”来表示一个换行符。根据您使用的文本组件,getText() 方法会将“\n”替换为适合您平台的换行符字符串 (JTextPane) 或在文本中保留“\n”(JTextArea).查看 Text and New Lines 了解更多信息。

不要使用格式化程序来编写文本。格式化程序不知道文本来自何处。

而是使用 JTextArea 提供的 write() 方法:

FileWriter writer = new FileWriter( new File(...) );
BufferedWriter bw = new BufferedWriter( writer );
textArea.write( bw );
bw.close();

write() 方法知道如何处理行尾字符串。