2013-05-16 120 views
2

我有这个程序,让你打开一个文件,并将其一次全部使用下面的代码到一个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); 

我想看到的是使用一个分隔符,只有读入这一行文字中取得了新的生产线一次一行,而不是整个文件。

有人可以帮忙吗?

回答

3

您可以使用BufferedReader读取行由行文件和使用的JTextAreaappend()方法读取每一行。为了方便起见,将JTextArea包裹在适当大小的JScrollPane中,如here所示。如果您预计有任何延迟,请使用SwingWorker在后台读取,并在process()中调用append()

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

是的,这是我决定我会做的。我使用'FileReader'和'BufferedReader'获取文件内容,然后使用'myTextArea.append(contents)'一次将它们追加到'JTextArea';' –

+1

+1但JTextComponent.read/write接受文件中的分隔符(双向I/O) – mKorbel

+2

@mKorbel:同意对'文档'进行不可分割的操作。除了Scanner外! :-) – trashgod

3

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

初始化从流。这将创建适合组件的模型,并从流中初始化模型。默认情况下,这将以纯文本的形式加载模型。以前的模型内容被丢弃。

+0

我不知道我明白你在告诉我什么。我不能一次只读一行到一个字符串,并将它连接到字符串已经包含的内容上,并为每个新连接提供一个换行符? –

+0

尝试一下,看看它做了什么。 –

+0

让我试试这个,我会回复你。在此先感谢 –