2014-10-15 4 views
0

У меня есть вопрос о хранении UUID. Я хотел бы использовать Java для создания UUID и сохранить его, чтобы я мог получить его при следующем запуске приложения.Java Store UUID

В приложении .NET, которое я построил, я делаю что-то похожее на это. Я использую реестр Windows для хранения UUID и всех других настроек. Однако это Java-приложение должно быть совместимо с кросс-платформой. Это представляет проблему. Очевидно, что в других операционных системах у меня не будет реестра Windows для такой задачи, так как я могу это сделать?

У меня есть одно решение для этой проблемы, но я хотел бы кое-что немного более изощренным. Моим текущим решением является хранение текстового файла (названного как-то вроде unique.txt) в каталоге приложения, а затем его чтение во время выполнения.

Вот мои жалобы о том, что решения:

  • Если пользователь перемещает приложения в новый каталог, программа для создания нового UUID и файла настроек.
  • Мне не нравится тот факт, что пользователь может видеть файл настроек, сидящий в их каталоге.

Вот условия, которые я хотел бы решение удовлетворить:

  • Раствор должен быть в состоянии хранить значение UUID (и, возможно, другие переменные) таким образом, что они могут быть извлечены и изменен во время выполнения.
  • Если приложение удалено и затем повторно загружено, значения предыдущей установки все равно должны быть восстановлены.
  • Файл, используемый для хранения значений, не должен отображаться в каталоге приложения (нет смысла загромождать каталог пользователей с помощью файла настроек).
  • Если пользователь перемещает приложение в другой каталог, приложение все равно сможет извлечь предыдущий файл настроек. Настройки не должны зависеть от каталога.

Я думал о хранении настроек файла в корневом каталоге (/ на UNIX и C:\ на Windows); однако, по моему опыту, для записи в корневой каталог обычно требуются повышенные разрешения. Я также чувствую, что корневой каталог не является наиболее подходящим местом для этого.

Если Java имеет встроенный метод для выполнения чего-то подобного, я бы очень признателен, если кто-то укажет на меня в направлении этого. В противном случае, если кто-то может дать некоторые рекомендации, это тоже будет здорово.

Приносим извинения, если этот вопрос является дубликатом. Я искал что-то вроде этого, но я не нашел ответа. Если что-либо о вопросе неясно, добавьте комментарий, и я попытаюсь пересмотреть вопрос, чтобы уточнить.

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

ответ

2

The Preferences API должен предоставить то, что вам нужно. Если вам нужны общие настройки для всей системы, проверьте systemNodeForPackage. Что-то вроде этого (не проверено):

class HardwareId { 
    public UUID read() { 
     Preferences pref = Preferences.systemNodeForPackage(HardwareId.class); 
     String uuid = pref.get("UUID", null); 
     if (uuid == null) { 
      uuid = UUID.randomUUID().toString(); 
      pref.put("UUID", uuid); 
      pref.flush(); 
     } 
     return UUID.fromString(uuid); 
    } 
} 
+0

Это может быть именно то, что я ищу. Доступны ли настройки 'systemNodeForPackage', даже если приложение будет удалено и повторно загружено? Кроме того, если бы я должен был обновить клиентское приложение и выпустить новую версию, сможет ли новое приложение использовать те же настройки, что и старая версия? Чтобы уточнить этот вопрос, в Windows все мои настройки сохраняются даже в случае обновления, потому что новая версия читает и записывает в тот же реестр. Будет ли этот API предоставлять эту функциональность? Независимо от того, +1 для этого ответа. Если API работает, я приму этот ответ. – SpencerD

+1

Прочитав больше об этом API, я ответил на свои вопросы об этом API. Кажется, это именно то, что я ищу. Спасибо за ваш ответ и помощь! – SpencerD

0

Вы считали базы данных для хранения значения.

http://en.wikipedia.org/wiki/Apache_Derby

Из википедии «Apache Derby (ранее распределенной в качестве IBM Cloudscape) является реляционная система управления базами данных (СУБД), разработанная Apache Software Foundation, которые могут быть встроены в программы Java и использоваться для обработки транзакций. "

+0

Благодарим вас за предложение. Я просто прочитал страницу wikipedia и быстро просмотрел «JavaDB» (на странице Википедии «JavaDB» поставляется с Java 7 и точно такой же, как Apache Derby). Из того, что я читал, похоже, что Apache Derby предназначен только для онлайн-использования. Если вы можете предоставить информацию о его внедрении на местном уровне, я был бы признателен. Кроме того, где хранится база данных? – SpencerD