JavaFX HTML Editor: текст в одной строке

1

Я использую следующий метод для чтения из файла:

public static StringBuilder read(String filepath) {
        ByteBuffer buffer = ByteBuffer.allocate(1000000);

        Path path = Paths.get(filepath);

        StringBuilder content = null;

        try (AsynchronousFileChannel channel = AsynchronousFileChannel.open(path, StandardOpenOption.READ)) {
            Future<Integer> fileResult = channel.read(buffer, 0);

            while(!fileResult.isDone()) {
                System.out.println("Reading in progress ...");
            }

            System.out.println("Bytes read: " + fileResult.get());

            buffer.flip();

            channel.close();

            CharSequence sequence = Charset.defaultCharset().decode(buffer);
            content = new StringBuilder(sequence);      
        } catch(IOException | InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        return content;
    }

Я хочу поместить возвращенный текст в JavaFX Control HTMLEditor. Это работает, но все прочитанные тексты вставляются в одну строку, означает, что разрыв строки из исходного файла игнорируется.

Кто-нибудь есть идея решить эту проблему?

Заранее спасибо!

Greetz

  • 0
    HTML использует <br> для разрывов строк, а обычный текст (\r)\n . Поэтому перед добавлением текста в редактор HTML необходимо заменить все вхождения \n на <br> .
  • 0
    Ах, хорошо, спасибо. Вопрос сейчас в том, как это эффективно. Я думаю, что перебирать строки очень неэффективно.
Теги:
io
javafx-8

1 ответ

1
Лучший ответ

Если исходный файл является HTML - файл он будет уже в HTML кодироваться брейков и абзаца (например, <br> или <p> элементы) в нем.

Если исходный файл не является html файлом, не пытайтесь отобразить его в HTMLEditor, используйте TextArea или что-то подобное.

В любом случае, если вы решите пойти и загрузить текстовый файл в редакторе html, вот пример кода. Что он делает, это отметить загруженный текст как предварительно отформатированный, окружив его тегами <pre>, таким образом, любые пробелы и новые строки во входном тексте сохраняются на дисплее HTMLEditor:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.web.HTMLEditor;
import javafx.stage.Stage;

import java.net.*;
import java.nio.file.*;

public class HTMLEditorLineDisplay extends Application {
    private static final String TEXT_LOCATION =
            "http://www.textfiles.com/etext/AUTHORS/SHAKESPEARE/shakespeare-life-54.txt";

    private StringBuilder textBuilder = new StringBuilder();

    @Override
    public void init() throws Exception {
        // sample data from the internet placed in a temporary file.
        Path tmpFile = Files.createTempFile("html-editor-text", ".txt");
        Files.copy(
                new URL(TEXT_LOCATION).openStream(),
                tmpFile,
                StandardCopyOption.REPLACE_EXISTING
        );

        // read lines from a file, appending a pre-formatting tag.
        textBuilder.append("<pre>");
        Files.lines(tmpFile)
                .forEach(
                        line -> textBuilder.append(line).append("\n")
                );
        textBuilder.append("</pre>");

        Files.delete(tmpFile);
    }

    @Override public void start(Stage stage) {
        // load pre-formatted text into the html editor.
        HTMLEditor editor = new HTMLEditor();
        editor.setHtmlText(textBuilder.toString());
        textBuilder = new StringBuilder();

        stage.setScene(new Scene(editor));
        stage.show();
    }

    public static void main(String[] args) { launch(args); }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню