2012-08-08 106 views
1

我正在使用java.util.prefs.Preferences爲我的應用程序創建引用,但由於某種原因,我似乎無法從XML文件加載首選項。我沒有收到文件未找到的錯誤,所以它正在加載文件。它似乎沒有解析文件。有人能讓我知道我做錯了什麼嗎?偏好庫不加載偏好

澄清是該文件正在加載。行'root.exportSubtree(System.out)'輸出整個XML。然而,我從這個例子中只顯示了根用戶的根節點。這可能暗示了我的問題,但我仍然沒有解決它。

我Preferences類

package com.g4apps.secure.processserver; 

import java.io.BufferedInputStream; 
import java.io.FileInputStream; 
import java.io.InputStream; 
import java.util.prefs.Preferences; 

public class PSPrefs { 
     private String user; 
     private String url; 
     private String password; 
     private String database; 

     public PSPrefs(String file) { 
      InputStream is = null; 

      try { 
       is = new BufferedInputStream(new FileInputStream(file)); 
       Preferences.importPreferences(is); 
       Preferences root = Preferences.userRoot(); 
       root.exportSubtree(System.out); 
       this.user=root.get("user", ""); 
       this.url=root.get("url", ""); 
       this.password=root.get("password",""); 
       this.database=root.get("database",""); 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     public String getUser() { 
      return this.user; 
     } 
     public String getURL() { 
      return this.url; 
     } 
     public String getPassword() { 
      return this.password; 
     } 
     public String getDatabase() { 
      return this.database; 
     } 


} 

我的preferences.xml文件。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE preferences SYSTEM "http://java.sun.com/dtd/preferences.dtd"> 
<preferences EXTERNAL_XML_VERSION="1.0"> 
    <root type="user"> 
     <map/> 
     <node name="Server Settings"> 
      <map> 
       <entry key="user" value="user"/> 
       <entry key="url" value="jdbc:mysql://mysqldb.com/"/> 
       <entry key="password" value="password"/> 
       <entry key="database" value="mydb"/> 
      </map> 
     </node> 
    </root> 
</preferences> 

感謝您的任何和所有幫助。

回答

0

那麼,彈出我的東西是該文件不是你認爲它的地方。試着用file.exists()

驗證文件的存在確保文件在執行上下文中的正確位置

UPDATE

好了,對不起我的壞:(

試試這個:

try { 
    is = new BufferedInputStream(new FileInputStream(file)); 
    Preferences.importPreferences(is); 
    Preferences root = Preferences.userRoot(); 

    Preferences node = Preferences.userRoot().node("Server Settings"); 

    this.user = node.get("user", ""); 
    this.url = node.get("url", ""); 
    this.password = node.get("password", ""); 
    this.database = node.get("database", ""); 

    System.out.println(user); 
    System.out.println(url); 
    System.out.println(password); 
    System.out.println(database); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

這給我輸出

user 
jdbc:mysql://mysqldb.com/ 
password 
mydb 

哦,還有如果你使用從roseindia的例子,它實際上拋棄了整個喜好樹,他們只是「強調」有分支

+0

是啊,這不是它。我正在閱讀XML文件。雖然root.exportSubTree(System.out)行顯示整個XML。在這個例子中,我只是在type = user下面顯示了Subtree。 – Codeguy007 2012-08-08 21:06:55

+0

@ Codeguy007對不起,早上應該確保完成一杯咖啡因:P – MadProgrammer 2012-08-08 22:14:06

+0

是的,我不確定這是否是完整的產量。看起來裁剪。這並不是最好的例子,因爲在告訴你如何獲得價值觀之前它會停下來,但這是我能找到的最好的例子。 – Codeguy007 2012-08-09 02:54:31