Java 将文本从jTextArea(即另存为)保存到新的.txt文件中
我正忙于将文字处理器作为我的项目之一,我需要将输入jTextArea的文本保存为一个.txt文件,其中包含用户选择的名称和位置。注意“fc”是我已经声明的i文件选择器的名称Java 将文本从jTextArea(即另存为)保存到新的.txt文件中,java,swing,file-io,jtextarea,Java,Swing,File Io,Jtextarea,我正忙于将文字处理器作为我的项目之一,我需要将输入jTextArea的文本保存为一个.txt文件,其中包含用户选择的名称和位置。注意“fc”是我已经声明的i文件选择器的名称 public class TextEditor extends javax.swing.JFrame { int count = 2; JTextArea n = new JTextArea(); final JFileChooser fc = new JFileChooser();
public class TextEditor extends javax.swing.JFrame {
int count = 2;
JTextArea n = new JTextArea();
final JFileChooser fc = new JFileChooser();
public void SaveAs() {
final JFileChooser SaveAs = new JFileChooser();
SaveAs.setApproveButtonText("Save");
int actionDialog = SaveAs.showOpenDialog(this);
File fileName = new File(SaveAs.getSelectedFile() + ".txt");
try {
if (fileName == null) {
return;
}
BufferedWriter outFile = new BufferedWriter(new FileWriter(fileName));
outFile.write(n.getText()); //put in textfile
outFile.close();
} catch (IOException ex) {
}
}
您似乎(尽管缺少一些代码)正在使用FileReader
读取所选文件,然后使用FileWriter
写入同一文件。显然,这是在兜圈子
您需要调用JTextArea
方法(getText()
etc)来获取文本,然后将其写入文件
这个.n是什么
还请注意,您正在使用catch(IOException ex){}
以静默方式捕获异常,即不记录任何错误-因此,如果出现问题,您将不会获得任何信息
最后,您应该使用Finally
关闭您的文件-如果您在try
块中执行此操作,如果出现异常,它将不会关闭
更新(现在Q已经被编辑):大概您的JFileChooser正在返回一个目录。然后将“.txt”附加到它。我不认为这是你的意思。在写入文件之前,请尝试打印出文件名。请在写之前打印出
n.getText()
,并告诉我们您看到了什么。还请在catch块中放置一个println
,以便确认是否引发了异常。我将使用JTetArea自己的写入方法,因为这将允许轻松写入文件,并将很好地处理所有换行。例如(借用您的代码):
您的代码中有一些bug。例如,这是可行的
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
@SuppressWarnings("serial")
public class TextEditor extends JFrame {
int count = 2;
JTextArea textArea = new JTextArea(10, 30);
final JFileChooser fc = new JFileChooser();
public TextEditor() {
add(new JScrollPane(textArea));
add(new JPanel(){{add(new JButton(new AbstractAction("Save As") {
@Override
public void actionPerformed(ActionEvent arg0) {
saveAs();
}
}));}}, BorderLayout.SOUTH);
}
public void saveAs() {
FileNameExtensionFilter extensionFilter = new FileNameExtensionFilter("Text File", "txt");
final JFileChooser saveAsFileChooser = new JFileChooser();
saveAsFileChooser.setApproveButtonText("Save");
saveAsFileChooser.setFileFilter(extensionFilter);
int actionDialog = saveAsFileChooser.showOpenDialog(this);
if (actionDialog != JFileChooser.APPROVE_OPTION) {
return;
}
// !! File fileName = new File(SaveAs.getSelectedFile() + ".txt");
File file = saveAsFileChooser.getSelectedFile();
if (!file.getName().endsWith(".txt")) {
file = new File(file.getAbsolutePath() + ".txt");
}
BufferedWriter outFile = null;
try {
outFile = new BufferedWriter(new FileWriter(file));
textArea.write(outFile);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (outFile != null) {
try {
outFile.close();
} catch (IOException e) {}
}
}
}
private static void createAndShowGui() {
TextEditor frame = new TextEditor();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
你只需要在结尾关闭你的文件,这样它就可以将文本写入到你的文件中 例如:
BufferedWriter wr;
try { wr = new BufferedWriter(new FileWriter(path));
wr.write(edytor.getText());
wr.close();
} catch (IOException ex) {
Logger.getLogger(Okno.class.getName()).log(Level.SEVERE, null, ex);
}
你需要向我们展示你拥有的和你尝试过的。我们不是来为您编写代码的,我们是来帮助调试您所做的事情的。您的方法
SaveAs
和您的JFileChooserSaveAs
使用相同的名称,并且不遵循正常的Java命名约定,这会造成混乱……到底是什么问题(又名:您的问题)现在我有了这个outFile.write(n.getText());('n'是jTextArea)但仍然没有将文本写入文件我缺少什么?不知道,因为我看不到您如何声明和设置n
。尝试用更多的代码更新您的问题。您还可以打印出n.getText()
,以确认预期的文本确实存在。如果仍不将文本写入新文件,则保存的文件不会保存文本text@user1267300:“不起作用”不能告诉我们太多让我们告诉你为什么。如果您仍然需要我们的帮助,我建议您创建一个(请阅读链接),并向我们展示它是如何工作的;仍不将文本写入新文件
BufferedWriter wr;
try { wr = new BufferedWriter(new FileWriter(path));
wr.write(edytor.getText());
wr.close();
} catch (IOException ex) {
Logger.getLogger(Okno.class.getName()).log(Level.SEVERE, null, ex);
}