2016-07-21 12 views
0

私はファイル(名前とその連絡先のリストです)から読み込み、それをGUIのテキストエリアに表示しています。ファイルが正常に読み込まれ、テキストが表示されます。しかし、ファイルの各行をGUIの新しい行に置いておきたい。だから、それぞれの名前と住所は新しい行にあるべきです。これはどうすればいいですか? これはこれまでのコードですが、ファイルの各行をGUIの新しい行に表示しません。ファイルからJTextArea(GUI)を1行ずつ読み込む方法は?

public void books() throws IOException { 
     String result = " "; 
     String line; 
     LineNumberReader lnr = new LineNumberReader(new FileReader(newFile("books2.txt"))); 
     while ((line = lnr.readLine()) != null) { 
      result += line;` 
     } 


     area1 = new JTextArea(" label 1 "); 
     area1.setText(result); 
     area1.setBounds(50, 50, 900, 300); 
     area1.setForeground(Color.black); 
     panelMain.add(area1); 

    } 
+0

とにかくファイル全体を表示すると、1行ずつ読む必要がありますか? –

+0

@SergeyTachenov私はそれぞれの名前に新しい行が必要なので、現時点ではGUI上の1行に表示されていて、それに適合しません。 – Sophie

+1

しかし、あなたはそれが1行で表示されていることを認識していますか? –

答えて

1

実際に行単位で読む必要はありません。このような何かを行います:

String result = new String(Files.readAllBytes(Paths.get("books2.txt")), 
          StandardCharsets.UTF_8); 

これは、もちろん、より多くのメモリが必要になります:最初のバイトを読み取るために、次に文字列を作成します。しかし、メモリが懸念されている場合は、一度にファイル全体を読むことは、とにかくおそらく、それをJTextAreaに表示することは言うまでもありません!

異なる行末を正しく処理できないことがあります。 readLine()を使用すると、CR LF、LFまたはCRのように、すべての終了行を削除します。上記の方法では、文字列をそのまま読み込みます。結局それを行単位で読むことは結局悪い考えではありません。しかし、私はちょうどチェックした - JTextAreaは、CR LFをすべて処理するようです。しかし、他の問題を引き起こす可能性があります。

はライン・バイ・ラインアプローチで、私はこれはまだEOLの最後行を取り除き

String result = String.join("\n", 
     Files.readAllLines(Paths.get("books2.txt"), 
      StandardCharsets.UTF_8)); 

ような何かをしたいです。それが重要な場合(たとえば、最後の行の後ろにテキストカーソルを置くことができるようにしたい場合)、もう一度+ "\n"を実行してください。

上記のすべてにはJava 7/8が必要です。

は、Java 6か何かを使用している場合は、あなたがそれを行う方法は、ことを除いて、おそらくOKです:

  1. - あなたは、行番号を必要としないBufferedReaderLineNumberReaderを交換し、あなたのですか?
  2. String resultStringBuilder result = new StringBuilder()と置き換え、+=result.append(line).append('\n')と置き換えます。
  3. 最後にresult.toString()を使用して文字列を取得します。
関連する問題