TextArea - 有啥方法可以获取所有文本?

Posted

技术标签:

【中文标题】TextArea - 有啥方法可以获取所有文本?【英文标题】:TextArea - Any way to get all text?TextArea - 有什么方法可以获取所有文本? 【发布时间】:2012-09-05 23:56:27 【问题描述】:

所以我正在设计一个文本编辑器。对于打开/保存方法,我正在尝试使用 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)   
       
      
  

【问题讨论】:

记录这些异常的方法。 x 是什么? 1) 请对代码块使用一致且符合逻辑的缩进。 2)对于每个catch,添加e.printStackTrace(); 3)请学习常见的Java naming conventions(特别是用于名称的大小写)用于类,方法和属性名称并一致地使用它。 考虑使用JTextComponent.read(Reader, Object) & write(Writer)。更强大。 【参考方案1】:

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

你可以用ArrayList把TextArea的所有内容都放上来,通过调用save作为参数发送,因为writer只是写了string行,最后我们用“for”一行一行的写我们的ArrayList我们将内容 TextArea 在 txt 文件中。 如果有什么不明白的地方,我很抱歉谷歌翻译和我不会说英语。

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


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 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);        

【讨论】:

【参考方案2】:

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

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

祝你好运。

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于TextArea - 有啥方法可以获取所有文本?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以禁用 Firefox 4 textarea-resizing 句柄?

angularjs中的textarea和输入类型文本有啥区别

字串text与文本textarea有啥区别

jquery 获取textarea文本值详解

如何利用JS代码选取textarea中的指定行

Java Swing TextArea“粘性文本”[重复]