Я использую следующий метод для чтения из файла:
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
Если исходный файл является 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); }
}
<br>
для разрывов строк, а обычный текст(\r)\n
. Поэтому перед добавлением текста в редактор HTML необходимо заменить все вхождения\n
на<br>
.