一次向String添加一行

时间:2013-05-16 13:32:04

标签: java swing file-io java.util.scanner jtextarea

我有这个程序可以让你打开一个文件,并使用以下代码一次性将其读入JTextArea

 try{
    String fileContents = new Scanner(new File(fileName)).useDelimiter("\\Z").next();
  }catch(FileNotFoundException ex){
    ex.printStackTrace();
  }

  myTextArea.setText(fileContents);

这是有效的。但我的问题是如何将其读入我的fileContents字符串中,并且每次获得换行符时都会在换行符中添加它?

这就是我所拥有的,但这会在textArea中将它全部放在一行:

 try{
Scanner contentsTextFile = new Scanner(new File(fileName));
while(contentsTextFile.hasNext()){
    fileContents = contentsTextFile.useDelimiter("\r\n|\n").nextLine(); 
    }

}catch(FileNotFoundException ex){
    ex.printStackTrace();
}

   myTextArea.setText(fileContents);

我希望看到的是,这一行文本使用的分隔符只能一次读取一行而不是整个文件。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

最简单的方法是使用JTextComponent.read(Reader,Object)

  

从流初始化。这将创建适合该组件的类型的模型,并从流初始化模型。默认情况下,这会将模型加载为纯文本。该模型的先前内容将被丢弃。

答案 1 :(得分:3)

您可以使用BufferedReader逐行阅读文件,并使用append() JTextArea方法读取每一行。为方便起见,请将JTextArea包裹在尺寸合适的JScrollPane中,如图here所示。如果您预计会有任何延迟,请使用SwingWorker在后台阅读,并在append()中致电process()

BufferedReader in = new BufferedReader(new FileReader(fileName));
String s;
while ((s = in.readLine()) != null) {
    myTextArea.append(s + "\n");
}