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
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 句柄?