2014-10-15 2 views
0

UUID 저장에 대한 질문이 있습니다. Java를 사용하여 UUID를 생성하고 저장하여 다음에 응용 프로그램이 실행될 때 검색 할 수 있도록하고 싶습니다.Java Store UUID

내가 만든 .NET 응용 프로그램에서 이와 비슷한 작업을하고 있습니다. Windows 레지스트리를 사용하여 UUID 및 기타 모든 설정을 저장합니다. 그러나이 Java 응용 프로그램은 플랫폼 간 호환이 가능합니다. 이것은 문제를 제시합니다. 분명히 다른 운영 체제에서는 이러한 작업을 수행하기 위해 Windows 레지스트리가 없으므로 어떻게해야합니까?

이 문제에 대한 해결책이 하나 있지만 좀 더 정교하게 처리하고 싶습니다. 현재 솔루션은 응용 프로그램의 디렉토리에 텍스트 파일 (예 : unique.txt)을 저장 한 다음 런타임에 읽는 것입니다. 사용자가 새 디렉토리에 응용 프로그램을 이동

  • 경우, 프로그램이 새로운 UUID 및 설정 파일을 생성 할 수있다 : 여기

    는 해당 솔루션에 대한 내 불만이다.
  • 사용자가 자신의 디렉토리에있는 설정 파일을 볼 수 있다는 사실을 좋아하지 않습니다.

    • 용액들이 검색 될 수있는 방식으로 UUID 값 (및 다른 변수들)를 저장할 수 있어야한다 :

    여기서 I는 솔루션이 만족하려는 조건은 런타임에 수정됩니다.

  • 응용 프로그램을 삭제 한 다음 다시 다운로드하면 이전 설치 값을 검색 할 수 있어야합니다.
  • 값을 저장하는 데 사용되는 파일이 응용 프로그램의 디렉토리에 나타나서는 안됩니다 (설정 파일을 사용하여 사용자 디렉토리가 어지럽 혀지지 않음).
  • 사용자가 응용 프로그램을 다른 디렉토리로 이동하는 경우 응용 프로그램은 이전 설정 파일을 검색 할 수 있어야합니다. 설정은 디렉토리에 종속되어서는 안됩니다. 내가 설정을 저장에 대해 생각

루트 디렉토리 (UNIX의 / 및 Windows에 C:\)에서 파일; 그러나 필자의 경험에 따르면 루트 디렉터리에 쓰기 위해서는 일반적으로 높은 권한이 필요합니다. 나는 또한 루트 디렉토리가 이것에 가장 적합한 장소가 아닌 것처럼 느낀다.

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

값을 저장할 데이터베이스를 고려 했습니까?(이전에 IBM Cloudscape를로 배포) 아파치 더비 "위키 피 디아에서

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

는 자바 프로그램에 포함 된 온라인 트랜잭션 처리에 사용할 수있는 아파치 소프트웨어 재단에 의해 개발 된 관계형 데이터베이스 관리 시스템 (RDBMS)입니다. "

+0

제안 해 주셔서 감사합니다. 방금 위키 피 디아 페이지를 읽고 "JavaDB"에 대한 빠른 검색을 수행했습니다 (위키피디아 페이지에 "JavaDB"는 Java 7과 함께 제공되며 Apache Derby와 정확히 동일합니다). 필자가 읽은 바에 따르면, Apache Derby는 온라인 사용만을위한 것으로 보입니다. 로컬로 구현하는 방법에 대한 정보를 제공 할 수 있다면 감사하겠습니다. 또한 데이터베이스는 어디에 저장됩니까? – SpencerD