Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Сохранение данных


Автор: Reptor 12.9.2007, 14:07
Вопрос состоит в следующем: мне необходимо сохранять много текстовой инфрмации (ну это своего рода различные настройки приложения ) так как луче сделать сохранять их в XML или обычном текстовом файле. Дело в том что эти настройки в дальнеёшем можно будет открывать и использовать в 2-ом приложении (это приложение может быть написано на 2-ом языке). ?

И на этой почве ещё один вопрос как в Java обстоит работа с XML и файлами?

Автор: _Y_ 12.9.2007, 15:18
Ну это по вкусу. smile 

С XML в Java обстоит хорошо. Единственно, ИМХО, не стоит использовать dom классы, которые она предлагает по умолчанию. Лучше взять jar с dom4 (У меня dom4j-1.6.1.jar но может есть версия и новее). Но это, естественно, если собираетесь работать с DOM.

Автор: Reptor 12.9.2007, 15:27
_Y_, а где есть документация желательно на русском по работе JAVA + XML 

Цитата

 Лучше взять jar с dom4 (У меня dom4j-1.6.1.jar но может есть версия и новее


где можно скачать эту библиотеку.

Цитата

 Но это, естественно, если собираетесь работать с DOM.


Не совсем понял а без Dom это что имеется ввиду?

Автор: jManiak 12.9.2007, 16:14
java.util.Properties

Автор: tux 12.9.2007, 16:19
Цитата(Reptor @  12.9.2007,  15:27 Найти цитируемый пост)
Не совсем понял а без Dom это что имеется ввиду? 

SAX, например.

Автор: _Y_ 12.9.2007, 16:26
Цитата(Reptor @ 12.9.2007,  15:27)
а где есть документация желательно на русском по работе JAVA + XML 

Не знаю. Доки, но они на английском. Может Googl поможет?

Цитата(Reptor @ 12.9.2007,  15:27)
Цитата
 Лучше взять jar с dom4
где можно скачать эту библиотеку

http://www.dom4j.org

Цитата(Reptor @ 12.9.2007,  15:27)
Не совсем понял а без Dom это что имеется ввиду?

XML может обрабатываться как единый документ (модель DOM), а может - посредством генерации событий (модель SAX).  В поледнем случае можно работать с документами любого размера - в памяти все равно они не остаются. Это не только в Java, но и в других языках - две модели на выбор. Но я работал только с DOM.

Добавлено @ 16:30
Цитата(jManiak @ 12.9.2007,  16:14)
java.util.Properties

Вряд-ли годиться, т.к. ему надо использовать те же установки программами, написанными на других языках.

Автор: Reptor 12.9.2007, 17:09
Ну и всётаки что луче по вашему DOM или SAX?

Автор: _Y_ 12.9.2007, 17:20
Цитата(Reptor @ 12.9.2007,  17:09)
Ну и всётаки что луче по вашему DOM или SAX?

Что лучше, кошка или собака? Я бы сказал, что для небольших количеств информации удобнее DOM, но если ее столько, что памяти жалко, то только SAX.

Автор: Reptor 12.9.2007, 17:33
а вот если я поработал с DOM забрал все данные которые мне необходимы то память почле этого же освобождается?

Автор: COVD 12.9.2007, 18:12
Цитата

а вот если я поработал с DOM забрал все данные которые мне необходимы то память почле этого же освобождается?


Со временем gc очистит память.

Мы пробуем сейчас сохранять свойства программы в xml с помощью java.bean.XMLEncoder/Decoder. При закрытии программы создается обьект, хранящий текущие параметры программы. С помощью анкодера предполагаем получать xml, который сохраняется на сервере. При старте программы xml загружается в программу и с помощью декодера восстанавливается обьект установок. XML предпочли потому, что параметров очень много. В использованием Preferences не устроило то, что свойства пишутся в регистр и приложение (JNLP) должно иметь соответствующие права. Такой подход годится только для использования одним приложением.

Автор: Tony 12.9.2007, 20:34
классы XMLEncoder i XMLDecoder из java.util.  smile 

Автор: COVD 12.9.2007, 20:59
точнее, в java.beans

Автор: _Michael 12.9.2007, 21:14
Цитата(COVD @  12.9.2007,  18:12 Найти цитируемый пост)
Со временем gc очистит память.

А если с SAX работать то память не gc освобождает? также со временем?

Добавлено через 2 минуты и 56 секунд
Цитата(Tony @  12.9.2007,  20:34 Найти цитируемый пост)
классы XMLEncoder i XMLDecoder из java.util. 


Tony,  у меня JDK 1.5 и в java.util нет етих классов. Но зато они есть в java.beans smile

Автор: COVD 12.9.2007, 23:22
DOM загружает в память сразу весь xml документ, потом начинает его парсировать. Может так случиться, что памяти не хватит, чтобы весь документ загрузить. 

SAX загружает кусочек документа, парсирует его и освобождает, потом загружает следующий кусочек, снова парсирует и освобождает, ...

В обоих случаях gc будет чистить память, но легче ему будет с SAX, т.к. загружаемые порции более мелкие.

Автор: y3u 13.9.2007, 05:51
Цитата(Reptor @  12.9.2007,  18:09 Найти цитируемый пост)
Ну и всётаки что луче по вашему DOM или SAX? 

если надо редактировать дерево в коде - DOM.
если нет - то SAX.
все просто...

Автор: Aoli 13.9.2007, 06:52
Цитата

ну это своего рода различные настройки приложения 

Может, тогда проще писать в файл пропертей?
Зачем генерить xml, затем ее читать, когда можно просто просетать нужные свойства и сохранить в файл?
И, кстати, класс ResourceBundle может сохранять как properties файл, так и xml.

Автор: AlexeyVorotnikov 13.9.2007, 10:21
Цитата(_Y_ @  12.9.2007,  18:20 Найти цитируемый пост)
Что лучше, кошка или собака?

Кошка однозначно smile

Автор: Reptor 13.9.2007, 15:54
А можно какието примеры по работе с настройками ну или как работать с XML создавать его редактировать, открывать и читать с него? И как его подключить себе? 

Автор: COVD 13.9.2007, 16:39
Цитата(Aoli @ 13.9.2007,  06:52)
Может, тогда проще писать в файл пропертей?
Зачем генерить xml, затем ее читать, когда можно просто просетать нужные свойства и сохранить в файл?

Проперти - это просто список параметр=значение. Удобно для простых случаев. Теперь представьте, что пользователь открывает в приложении несколько окон. При закрытии программы надо сохранить, например, текущие размеры, позицию каждого окна и состояния чекбоксов. Список свойств становится динамическим (количество параметров)  и принимает вид окно.параметр=значение . Если внутри окна есть вложенные компоненты , то окно.компонент.параметр=значение.  И это надо программировать очевидно вручную. А использование xml позволяет автоматизировать этот процесс благодаря наличию парсеров.

Автор: Aoli 13.9.2007, 18:57
Цитата

Удобно для простых случаев

Абсолютно согласен.
Я имею в виду, что для простых случаев можно воспользоваться простыми решениями smile

Автор: Reptor 13.9.2007, 19:21
Да у меня как раз сложный случай всё как писал COVD, подскажите пожалуста доки на русском или готовые хорошие примеры по работе с XML

Автор: y3u 13.9.2007, 19:39
Цитата(COVD @  13.9.2007,  17:39 Найти цитируемый пост)
И это надо программировать очевидно вручную


кхе, эта, ключик для бандла сформировать на основе типа, имени компонента и его иерархии сложно? По-моему гораздо сложнее в данном случае писать DOM модель, т.к. данные, очевидно, придется сохранять. DOM модель, суть - дерево, иерархия компонентов - дерево. Дерево будем строить, типо, второй раз? Удобство лично для меня сомнительно... проперти проще. К тому же проперти можно (и удобно) разнести на разные бандлы для различных целей, а если надо разнести XML-ник, придется писать парсеры и домифайеры на каждый формат... Сейчас вы мне скажете про универсальный формат, угу, непомерных размеров, в котором без XML Spy не разберешься... да и весить он будет в 3 раза больше пропертей по причине избыточной информации...

ПыСы
кстати, если задуматься о записи, если предположить, что у нас пропертисы, ну, или , там, XML-ник запакован в jar либо в war/ear, то встает законный вопрос, куда писать.... советую глянуть в сторону http://java.sun.com/javase/6/docs/api/java/util/prefs/package-summary.html
http://java.sun.com/javase/6/docs/api/java/util/prefs/Preferences.html

Автор: COVD 13.9.2007, 21:28
Цитата

кстати, если задуматься о записи, если предположить, что у нас пропертисы, ну, или , там, XML-ник запакован в jar либо в war/ear, то встает законный вопрос, куда писать.... 


Preferences мы откинули по причине того, что у нас webstart клиент и не хочется его подписывать, а иначе у него нет необходимых прав куда-то писать. Он вступает в диалог с пользователем, а нам этого не надо. Кроме того еще неизвестно, поможет ли подписка пользователям, которые работают из офиса и не имеют административных прав на своем служебном компьютере (всеобщая озабоченность безопасностью). Поэтому мы будем писать только на сервер. А вообще конечно это удобно.

Цитата

кхе, эта, ключик для бандла сформировать на основе типа, имени компонента и его иерархии сложно?


Про ключик я не знаю как и что. Буду благодарен, если намекнете. Но и Дом модель писать тоже вроде не надо. Предполагаем, что каждый компонент вернет обьект - java bean (тут уж вручную, наверное, только нужные свойства), и этот бин через  java.beans.XMLEncoder/Decoder будем превращать в xml и обратно.

to Reptor

у вас требование, чтобы свойства можно было восстановить в другой программе и возможно написанной на другом языке, поэтому использование java.beans.XMLEncoder/Decoder возможно не лучший для вас вариант (для нас возможно тоже  smile  ).

Автор: y3u 14.9.2007, 08:36
Цитата(COVD @  13.9.2007,  22:28 Найти цитируемый пост)
Поэтому мы будем писать только на сервер

а куда на сервер? Если в FS, тогда вопрос: а если клентов хотя бы 1000 и каждому по метру на настройки - это уже гиг, квотировать, таки, придется иначе со временем сожрется вся память. Рулить квотами кто будет? А мониторинг неиспользуемых настроек тоже придется писать... А если в БД, ну, в принципе, если бабла не жалко, можно организовать под эту, в общем-то, бесполезную информацию, отдельный сервак, тогда да, согласен... 
Эта, может, таки, подписать?

Цитата(COVD @  13.9.2007,  22:28 Найти цитируемый пост)
Он вступает в диалог с пользователем

и что? Виндовз тоже вступает с пользователем в диалог, когда юзер пытается удалить файл, Аутпост Файерволл или какой-нить Зоналарм, тоже вступают с пользователем в диалог, когда находятся в режие обучения. Я вас умоляю, на дворе 21 век, все умеют пользоваться компам, даже дети малые, чего такого страшного в диалоге? Это же нормально...

Добавлено через 7 минут и 35 секунд
кстати, впомнил, что у апачча в коммонсах видел полезную тулу, думаю, всех спасет smile

http://commons.apache.org/configuration/

Автор: COVD 14.9.2007, 16:00
Цитата(COVD @  13.9.2007,  22:28 Найти цитируемый пост)
Поэтому мы будем писать только на сервер


Цитата

а куда на сервер? Если в FS, тогда вопрос: а если клентов хотя бы 1000 и каждому по метру на настройки - это уже гиг, квотировать, таки, придется иначе со временем сожрется вся память. Рулить квотами кто будет? А мониторинг неиспользуемых настроек тоже придется писать... А если в БД, ну, в принципе, если бабла не жалко, можно организовать под эту, в общем-то, бесполезную информацию, отдельный сервак, тогда да, согласен... 


FS - это file system? Что такое гиг. 21 век smile. В БД будем писать. Опять же это мобильность для клиента - утром соединился из офиса, вечером из дома.  

Цитата

Эта, может, таки, подписать?


Конечно, правильнее подписать. Не подписывать скорее бизнес установка, чем техническое решение. Но все же, как я выше отметил, нет уверенности, что это снимет все проблемы для офисных клиентов.

Цитата(COVD @  13.9.2007,  22:28 Найти цитируемый пост)
Он вступает в диалог с пользователем


Цитата

и что? Виндовз тоже вступает с пользователем в диалог, когда юзер пытается удалить файл, Аутпост Файерволл или какой-нить Зоналарм, тоже вступают с пользователем в диалог, когда находятся в режие обучения. Я вас умоляю, на дворе 21 век, все умеют пользоваться компам, даже дети малые, чего такого страшного в диалоге? Это же нормально...


Вот именно. Дети как раз лучше умеют. Ничего не боясь жмут на кнопку Ok. А публика по другую сторону экватора - не всегда. Вы тоже считаете, что установить java-плагин на компьютер проще пареной репы? 

Конечно, проблема видится не в диалоге, а в том, что он просит дать доступ и т.д. Но вы правы, прогресс не остановить smile.


Добавлено @ 08:44
кстати, впомнил, что у апачча в коммонсах видел полезную тулу, думаю, всех спасет smile

http://commons.apache.org/configuration/

Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)