在从 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()
方法知道如何处理行尾字符串。
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.
希望对您有所帮助!
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()
方法知道如何处理行尾字符串。