TextArea - 以任何方式获取所有文本?

时间:2012-09-05 23:56:27

标签: java text file-io save editor

所以我正在设计一个文本编辑器。对于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)   
    {   
   }   
}  
}

3 个答案:

答案 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)

这里有很多事情......

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

答案 2 :(得分:0)

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

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

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