1

我正在使用java.util.prefs.Preferences为我的应用程序创建引用,但由于某种原因,我似乎无法从 xml 文件加载首选项。我没有收到文件未找到错误,所以它正在加载文件。它似乎没有解析文件。有人可以让我知道我做错了什么吗?

澄清是的,正在加载文件。'root.exportSubtree(System.out)' 行正在输出整个 XML。但是,我从中获取的示例仅显示了根“用户”的子根。这可能是对我的问题的暗示,但我仍然没有解决它。

我的偏好类

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>

感谢您的任何帮助。

4

1 回答 1

0

好吧,我突然想到的是该文件不在您认为的位置。尝试验证文件是否存在file.exists()

确保文件在执行上下文中的正确位置

更新

好的,对不起,我的不好:(

试试这个:

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 的示例,它实际上会丢弃整个偏好树,它们只是“突出显示”了那里的分支

于 2012-08-08T20:25:30.297 回答