在java中存储本地数据?

时间:2012-11-21 00:31:41

标签: java text storage

我正在使用Java进行简单的文本冒险。我希望能够定义每个任务的进度,并且将存储在用户的appdata中的某个位置,以便在他们下次玩游戏时阅读。我怎么能这样做?

4 个答案:

答案 0 :(得分:1)

如果您只想在内部存储数据(即,跨会话保存,而不是用户可读的文件),我会使用Preferences API

例如:假设您有一个名为MissionInfo的类,它实现了java.io.Serializable。您可以执行以下操作:

// Precondition: missionInfoToSave is an variable of type MissionInfo

// The key used to store the data.
final String key = "SAVE_DATA";

// Get the preferences database for this package.
Preferences prefs = Preferences.userNodeForPackage(MissionInfo.class);

// To save, write the object to a byte array.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
    ObjectOutputStream oos = new ObjectOutputStream(baos);
    oos.writeObject(missionInfoToSave); // write it to the stream
    prefs.putByteArray(key, baos.toByteArray());
} catch (IOException ie) {
    System.err.println("Failed to save to file");
}

// To load, read it back.
// The second argument is the default if the key isn't found.
byte[] stored = prefs.getByteArray(key, null);
if (stored == null) {
    // There's no stored data.
    return;
}
ByteArrayInputStream bais = new ByteArrayInputStream();
try {
    ObjectInputStream ois = new ObjectInputStream(bais);
    Object o = ois.readObject();
    if (o instanceof MissionData) { 
        // Good: it's a saved data file.
        updateMissionProgress((MissionData) o); // assuming this is defined
    }
} catch (IOException ie) {
    System.err.println("Couldn't load from prefs");
} catch (ClassNotFoundException cnfe) {
    System.err.println("Class couldn't be found");
}

Preferences API将跨会话存储数据。您可以在java.util.prefs包中找到它。

答案 1 :(得分:0)

您可以使用java.util.Properties,这是一个方便的实用程序,用于创建键和值的映射,将其存储在文件中,以及从该文件加载相关的Properties对象。可以找到关于将Properties与文件一起使用的精彩教程here

要获取AppData目录文件路径(在Windows中),您可以使用System.getenv("APPDATA")

答案 2 :(得分:0)

使用简单的数据库:sqlite或Berkeley DB http://docs.oracle.com/cd/E17277_02/html/index.html

答案 3 :(得分:0)

我建议您创建一个位于用户主目录中的特定于应用程序的文件夹,您可以使用此代码获取该文件夹:

String userHome=System.getProperty("user.home");

这会给你一个类似于c:\ Documents and Settings \ user1的字符串,然后你可以将你的appname附加到你的appname,如“adventureapp”,首先使用正向斜杠。然后从那。你可以这样做:

File file = new File(mypathtomyappfolder);

然后你测试.isDirectory()如果​​没有,这是用户第一次运行app do file.newDir(),所以你有了adventureapp目录。然后从那里使用File并将文件名附加到您的字符串,如user.properties,您可以根据他们在游戏中的进展来读取和写入。希望有所帮助。 - 邓肯