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
的文件中写入并保存在硬盘中。但是在将其写入文件时会出现问题,它不会占用新行。它将整个文本区域的文本保存在一行中。如何解决?
这里,当我保存文件时,它将其内容保存在Just ONE LINE中,与JTextArea
中的内容不同。也就是说,新行不会出现。它将所有内容保存在一行中。那么我该如何解决呢?
答案 0 :(得分:4)
Document
只会存储" \ n"代表换行符。根据您使用的文本组件,getText()
方法将替换" \ n"使用适合您平台的换行符(JTextPane
)或离开" \ n"在文本中(JTextArea
)。查看Text and New Lines了解详情。
不要使用Formatter来编写文本。格式化程序不知道文本来自何处。
只需使用write()
提供的JTextArea
方法:
FileWriter writer = new FileWriter( new File(...) );
BufferedWriter bw = new BufferedWriter( writer );
textArea.write( bw );
bw.close();
write()
方法知道如何处理行尾字符串。
答案 1 :(得分:2)
请勿使用\n
,而是使用自Java 7以来可用的System.getProperty("line.separator")
或System#lineSeparator
来获取依赖于平台的正确行分隔符(Windows,* nix)。< / p>
答案 2 :(得分:0)
"\n"
适用于控制台输出但不适用于文件。
使用"\r\n"
(适用于Windows)然后保存它应该做的。
答案 3 :(得分:0)
使用\r\n
轻松插入换行符是Windows回车。所以这只适用于Windows。你可以检查你的运行,然后硬编码每个操作系统的回车,如windows,linux,....
但坚持另一种更容易的方式。只需将System.getProperty("line.separator")
附加到您的文件的字符串上,它就会自动为您的操作系统附加回车。
希望有所帮助!