0

所以我正在设计一个文本编辑器。对于打开/保存方法,我正在尝试使用 TextArea(它不必是一个,它只是我当前的方法)。现在,我现在有两个问题:

1)当我加载一个文件时,它当前不会删除文本编辑器中当前的内容。例如,如果我输入“Owl”,然后加载一个包含“Rat”的文件,它最终会变成“OwlRat”。为了解决这个问题,我计划使用 replaceRange 方法(然而,它不是绝对的,任何建议都会很棒!)。但是,我必须替换文本编辑器的所有内容,而不仅仅是选定的文本,而且我不知道该怎么做。有小费吗?

2) 目前,当我加载文件时,除非我在运行应用程序的同时保存该文件,否则什么都不会发生。因此,例如,运行程序、保存文件、关闭程序、再次运行程序,然后加载文件将一无所获。我知道这是因为 String x 没有结转,但无论如何我都想不出修复它。有人建议使用 Vectors,但我看不出它们有什么帮助...

以下是打开/保存方法的代码:

打开:

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)   
    {   
   }   
}  
}
4

3 回答 3

1

我的男朋友也遇到了同样的问题,经过深思熟虑和研究,我什至找到了解决方案。

可以使用ArrayList把TextArea的所有内容都放上来,调用save作为参数发送,因为作者只是写了string行,那么我们用“for”一行一行的写我们的ArrayList,最后我们就可以了txt 文件中的内容 TextArea。如果有些事情没有意义,我很抱歉是谷歌翻译和我不会说英语。

观看Windows记事本,它不会总是跳行,并且显示在一行中,使用写字板可以。


私人无效SaveActionPerformed(java.awt.event.ActionEvent evt){

    String NameFile = Name.getText();
    ArrayList< String > Text = new ArrayList< String >();

    Text.add(TextArea.getText());

    SaveFile(NameFile, Text);
} 

公共无效保存文件(字符串名称,ArrayList<字符串>消息){

    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);        
}
于 2014-12-01T02:28:09.580 回答
0

使用textArea.setText(TEXT);而不是附加;append 表示添加到,因此当您将文本附加到 TextArea 时,您将该文本添加到其中。另一方面,setText 将设置文本,用新文本替换旧文本(这是你想要的)。

至于为什么它无法阅读,你没有正确阅读。首先,.read()只读取一个字符(不是你想要的)。其次,您似乎没有对返回的结果做任何事情。去某个地方(比如这里)找出如何正确读取文件,然后获取返回的字符串并执行textArea.setText(readString);.

就像其他人说的那样,e.printStackTrace();在所有 catch 块中使用以使错误实际显示在控制台中。

于 2012-09-06T00:29:29.280 回答
0

这里发生了很多事情...

  1. 什么是“x”(提示:它不是文件中的任何内容!),为什么要将它附加到文本区域?
  2. BufferedReader.read() 返回一个字符,这可能不是您所期望的。尝试遍历 readline()。
  3. 遵循 Dave Newton 的建议来处理您的异常并为您的变量提供更好的名称。
  4. 文本文件将在程序的多次调用中持续存在,因此缺少数据与此无关。

祝你好运。

于 2012-09-06T00:26:00.767 回答