所以我正在设计一个文本编辑器。对于Open / Save方法,我正在尝试使用TextArea(它不必是一个,它只是我当前的方法)。现在,我现在有两个问题:
1)当我加载文件时,它当前不会删除文本编辑器中当前的内容。例如,如果我输入“Owl”,然后加载包含“Rat”的文件,它最终将成为“OwlRat”。为了解决这个问题,我计划使用replaceRange方法(但是,这并不是绝对的,任何建议都会很棒!)。但是,我必须替换文本编辑器的所有内容,而不仅仅是选定的文本,我无法弄清楚如何做到这一点。有什么提示吗?
2)目前,当我加载文件时,除非我在运行应用程序的同时保存该文件,否则不会发生任何事情。因此,例如,运行程序,保存文件,关闭程序,再次运行程序,然后加载文件将不会给任何东西。我知道这是因为String x没有结转,但我无论如何都想不到它。有人建议使用Vector,但我看不出它们会如何帮助......
以下是打开/保存方法的代码:
打开:
public void Open(String name){
File textFile = new File(name + ".txt.");
BufferedReader reader = null;
try
{
textArea.append(x);
reader = new BufferedReader( new FileReader( textFile));
reader.read();
}
catch ( IOException e)
{
}
finally
{
try
{
if (reader != null)
reader.close();
}
catch (IOException e)
{
}
}
}
保存:
public void Save(String name){
File textFile = new File(name + ".txt");
BufferedWriter writer = null;
try
{
writer = new BufferedWriter( new FileWriter(textFile));
writer.write(name);
x = textArea.getText();
}
catch ( IOException e)
{
}
finally
{
try
{
if ( writer != null)
writer.close( );
}
catch ( IOException e)
{
}
}
}
答案 0 :(得分:1)
我的朋友也有同样的问题,经过深思熟虑和研究,我甚至找到了解决方案。
您可以使用ArrayList来放置TextArea的所有内容并通过调用save作为参数发送,因为编写器只是写了字符串行,然后我们逐行使用“for”来编写我们的ArrayList我们将在txt文件中内容TextArea。 如果事情没有意义,我很抱歉谷歌翻译和我不会说英语。
观看Windows记事本,它并不总是跳线,并在一行中显示所有内容,使用Wordpad确定。
private void SaveActionPerformed(java.awt.event.ActionEvent evt){
String NameFile = Name.getText();
ArrayList< String > Text = new ArrayList< String >();
Text.add(TextArea.getText());
SaveFile(NameFile, Text);
}
public void SaveFile(String name,ArrayList&lt; String&gt; message){
path = "C:\\Users\\Paulo Brito\\Desktop\\" + name + ".txt";
File file1 = new File(path);
try {
if (!file1.exists()) {
file1.createNewFile();
}
File[] files = file1.listFiles();
FileWriter fw = new FileWriter(file1, true);
BufferedWriter bw = new BufferedWriter(fw);
for (int i = 0; i < message.size(); i++) {
bw.write(message.get(i));
bw.newLine();
}
bw.close();
fw.close();
FileReader fr = new FileReader(file1);
BufferedReader br = new BufferedReader(fr);
fw = new FileWriter(file1, true);
bw = new BufferedWriter(fw);
while (br.ready()) {
String line = br.readLine();
System.out.println(line);
bw.write(line);
bw.newLine();
}
br.close();
fr.close();
} catch (IOException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Error in" + ex);
}
答案 1 :(得分:0)
这里有很多事情......
答案 2 :(得分:0)
使用textArea.setText(TEXT);
而不是追加; append意味着添加到,因此当您将文本追加到TextArea时,您将该文本添加到它。另一方面,setText将设置文本,用新文本替换旧文本(这是你想要的)。
至于为什么它没有阅读,你没有正确阅读。首先,.read()
只读取一个字符(不是你想要的)。其次,您似乎没有对返回的结果执行任何操作。去某个地方(比如here)找出如何正确读取文件,然后获取返回的字符串并执行textArea.setText(readString);
。
和其他人说的一样,在所有catch块中使用e.printStackTrace();
以使错误实际显示在控制台中。