Java IO: чтение текстовых файлов, как они видны

У меня есть текстовый файл, который содержит что-то вроде этого:

Hello, my name is Joe

What is your name?
My name is Jack.

That is good for you.

Единственная проблема заключается в том, что мне нужно загрузить его в JTextArea с помощью метода append, чтобы отобразить текст в JScrollPane следующим образом:

JTextArea ta = new JTextArea();
JScrollPane sp = new JScrollPane(ta);

Но когда я читаю файл в текстовую область, в текстовой области отображается что-то вроде этого:

Hello, my name is JoeWhat is your name?My name is Jack.That is good for you.

BufferedReader никогда не читает новые строки (\n) в JTextArea. Как заставить читатель добавлять пробелы и пустые строки по мере их появления в файле? Если кто-нибудь может помочь, я был бы признателен. Спасибо!


person MrDrProfessorTyler    schedule 25.03.2012    source источник
comment
Если вы используете метод BufferedReader.readLine(), он потребляет символы конца строки, которые он читает. Таким образом, вы должны вручную добавить \n после вызова его в строку чтения. Или вместо этого вы можете использовать BufferedReader.read() в буфере. stackoverflow .com/questions/4758525/   -  person ecle    schedule 25.03.2012
comment
опубликуйте свой блок кода, который читает текстовый файл, чтобы лучше понять.   -  person tsatiz    schedule 25.03.2012


Ответы (2)


Все JTextComponents имеют возможность читать текстовые файлы и записывать в текстовые файлы, полностью соблюдая символ новой строки для текущей операционной системы, и часто это выгодно использовать. В вашем случае вы должны использовать метод JTextArea read(...) для чтения в файле, полностью понимая собственный символ новой строки файловой системы. Что-то вроде этого:

BufferedReader br = new BufferedReader(new FileReader(file));
textArea.read(br, null);

Или для более полного примера:

import java.io.*;
import javax.swing.*;

public class TextIntoTextArea {
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }

   private static void createAndShowGui() {
      JFileChooser fileChooser = new JFileChooser();
      int response = fileChooser.showOpenDialog(null);
      if (response == JFileChooser.APPROVE_OPTION) {
         File file = fileChooser.getSelectedFile();
         BufferedReader br = null;
         try {
            br = new BufferedReader(new FileReader(file));
            final JTextArea textArea = new JTextArea(20, 40);

            textArea.read(br, null); // here we read in the text file

            JOptionPane.showMessageDialog(null, new JScrollPane(textArea));
         } catch (FileNotFoundException e) {
            e.printStackTrace();
         } catch (IOException e) {
            e.printStackTrace();
         } finally {
            if (br != null) {
               try {
                  br.close();
               } catch (IOException e) {
               }
            }
         }
      }
   }
}
person Hovercraft Full Of Eels    schedule 25.03.2012
comment
Это даже лучше! Спасибо большое - person MrDrProfessorTyler; 25.03.2012

Добавляйте новую строку при чтении строк.

Например

String output = "";
try {
    BufferedReader br = new BufferedReader(new FileReader(args[i]));
    while ((thisLine = br.readLine()) != null) {
        thisLine += "\n";
        output += thisLine;
    } 
} // end try
catch (IOException e) {
    System.err.println("Error: " + e);
}
person Ragnar123    schedule 25.03.2012