#java #file #jtextarea
#java #файл #jtextarea
Вопрос:
В этом коде:
protected void open() {
if (fc.showOpenDialog(Main.this) == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
}
}
Как я могу получить содержимое file
и установить его в вызываемую текстовую область textarea
?
Комментарии:
1. Прочитайте файл в строку (с возможностью простого поиска), затем задайте текст компонента — что у вас не работает?
2. Вам нужна именно текстовая область? Это довольно просто с помощью
JEditorPane
.
Ответ №1:
Для чтения файла используйте API, предоставляемый всеми компонентами Swing text. Что-то вроде:
FileReader reader = new FileReader( file );
BufferedReader br = new BufferedReader(reader);
textArea.read( br, null );
br.close();
Комментарии:
1. О, здорово — не знал об этом. Хотя вы должны закрыть его в блоке finally 🙂
2. camickr, если файл занимает слишком много времени, это приведет к зависанию графического интерфейса?
3. @nachokk, да, я бы предположил, что так и будет.
Ответ №2:
Я полагаю, вы хотите прочитать его как текст?
Если вы рады использовать стороннюю библиотеку, я бы лично использовал Guava, что делает ее тривиальной:
// This is assuming the file is UTF-8. If not, change appropriately.
String text = Files.toString(file, Charsets.UTF_8);
textarea.setText(text);
Обратите внимание, что при этом файл будет загружен в поток пользовательского интерфейса, который будет зависать во время загрузки пользовательского интерфейса… не очень хорошо, если это очень большой файл, но проще, чем делегирование в отдельный поток.
Комментарии:
1. 1 для делегирования в отдельный поток, поскольку ответ camickr кажется лучше, он выполняется только в edt.