【问题标题】:Add a line at a time to a String一次将一行添加到字符串
【发布时间】:2013-05-11 10:21:00
【问题描述】:

我有一个程序可以让你打开一个文件,并使用以下代码一次将其读入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);

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

有人可以帮忙吗?

【问题讨论】:

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


    【解决方案1】:

    您可以使用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");
    }
    

    【讨论】:

    • 是的,这就是我决定要做的。我使用FileReaderBufferedReader 获取文件内容,然后我使用myTextArea.append(contents); 一次将它们附加到JTextArea
    • +1 但 JTextComponent.read/write 接受文件中的分隔符(双向 I/O)
    • @mKorbel:同意在Document 上进行不可分割的操作。除了Scanner 之外的任何东西! :-)
    【解决方案2】:

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

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

    【讨论】:

    • 我不确定我是否明白你在告诉我什么。我不能一次将一行读入一个字符串并将其连接到字符串已经包含的内容上,并为每个新的连接提供一个换行符吗?
    • 试一试,看看它能做什么。
    • 让我试试这个,我会回复你的。提前致谢
    • 还要考虑JTextAreaappend()方法。
    猜你喜欢
    • 1970-01-01
    • 2019-03-17
    • 2017-01-20
    • 2020-04-13
    • 1970-01-01
    • 2015-07-15
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多