Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Вывод файла в текстовом поле |
Автор: diktator 30.7.2011, 00:27 | ||
Здравствуйте. Хочу вывести файл большого размера в текстовом поле, подскажите как быть. Размер файла 5МБ, и что если файл будет 1ГБ. Я вывожу так
где s - весь файл. Собственно из догадок, загружать к примеру файл по области видемости, к примеру 100 строк, ползунок делить на N раз, к примеру 10 если в файле 1000 строк. И при его передвижении открывать нужную часть файла. Или так нельзя? И как вообще можно в текстовое поле дописывать, а то setText() перезаписывает полностью. Вторая догадка, выделять много оперативной память, как это сделать тоже не знаю. 3 - комплексно. Помогите пожалуйста разобраться. |
Автор: dorogoyIV 30.7.2011, 13:02 |
[яуоте=диктатор, 30.7.2011, 00:27, пост2383069]и что если файл будет 1ГБ[/яуоте] маленький упрощенный расчет: 1 Гб = 1000 Мб = 1000 000 Кб = 1000 000 000 Байт одна буква равна два байта получаем: 500 000 000 букв возьмем среднее - слово = пять букв получаем: 100 000 000 слов в строку влазиет примерно 10 слов получаем: 10 000 000 строк в лист А4 влазиет примерно 55 - 60 строк (возьмем 50 для ровного счета) получаем: 200 000 двести тысяч листов! это кто такой нахрен писатель?! Лев Толстой? !!! Добавлено через 4 минуты и 30 секунд к разработчикам - какое еще "яуоте" - это была ссылка на текст топикстартера Добавлено через 11 минут и 15 секунд вас взломали? вот это был бы прикол!!! программистов взломали!!! ![]() |
Автор: diktator 30.7.2011, 15:07 |
dorogoyIV, ну от 2 до 4 в среднем в кодировке UTF-8. Да и кто сказал что там Война и мир, мне просто нужно вывести файл большого объема на экран, 5МБ, 1Гб я просто привел, потому как интересно как это реализуется. |
Автор: jk1 30.7.2011, 17:27 | ||||
В UTF-8 от 1 до 4. От 2 до 4 - это UTF-16.
Если файл очень большой, то читается и показывается его часть, например при помощи http://www.java-tips.org/java-se-tips/java.io/how-to-use-random-access-file.html |
Автор: diktator 30.7.2011, 20:20 | ||
Ну я же написал в среднем, если речь идет о тексте, то я думаю что в основном это будут 2-4 байта на 1 символ. Не ну прочитать часть файла можно через обычную конструкцию, брейк сделать. Речь идет об Окнах, как вывести на экран весь файл сразу. То есть как сделать полосу прокрутки не по размеру текста и как ее отлавливать. |
Автор: dorogoyIV 30.7.2011, 21:39 |
может быть сделать свой тексткомпонент, с прокруткой. пошла прокрутка - читаем файл и пишем прочитанное в свой тексткомпонент (читать файл - RandomAccessFile) |
Автор: spyswamp 8.8.2011, 00:56 |
Однозначно весь файл в память грузить не надо. ![]() ![]() ![]() |
Автор: danco0x53 8.8.2011, 11:29 |
1. Хорошего простого решения нет. 2. Для dorogoyIV: Лев Толстой уже давно отдыхает перед логами некоторых программ ![]() 3. Вариант с собственным компонентом - не столь плох. 4. Я бы - при необходимости решения такой задачи (показ с прокруткой в произвольное место большого текстового файла) - проиндексировал бы этот большой файл, набрав массив смещений для каждой строки в файле (гиг лога - пусть 10-20 млн. строк - 40-80 Мб, что приемлемо бывает), и заодно определив количество строк. Далее можно подчитывать файл по мере необходимости показа отдельных строк, держа в памяти только отображаемые (и выбранные) данные. Прокрутку от общего количества строк в файле и размера окна с текстом не так уж сложно будет сделать. 5. В принципе, можно такой компонентик сделать. Единственное, с чем придется изрядно погеморроится - это если автоперенос слов на новую строку. Тут да ![]() |