2013-05-16 8 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 и использовать 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"); 
} 
+0

Да, это то, что я решил сделать. Я получаю содержимое файла с помощью 'FileReader' и' BufferedReader', затем добавляю их по одному в 'JTextArea', используя' myTextArea.append (содержимое); ' –

+1

+1, но JTextComponent.read/write принимает разделители в файле (оба направления ввода/вывода) – mKorbel

+2

@mKorbel: Соглашайтесь для неразделенной работы с «Документом». Все, кроме «Сканера»! :-) – trashgod

3

Самый простой способ заключается в использовании JTextComponent.read(Reader,Object) которых:

инициализирует из потока. Это создает модель типа, подходящего для компонента, и инициализирует модель из потока. По умолчанию это загрузит модель как обычный текст. Предыдущее содержимое модели отбрасывается.

+0

Я не уверен, что понимаю, что вы говорите мне. Не могу ли я просто прочитать строку в строке за раз и объединить ее с тем, что уже содержит строка, и предоставить каждому новому конкатенации символ новой строки? –

+0

Попробуйте и посмотрите, что он делает. –

+0

Позвольте мне попробовать это, и я вернусь к вам. Заранее спасибо –

Смежные вопросы