我正在使用 Java 进行简单的文本冒险。我希望能够定义每个任务的进度,并将其存储在用户的应用数据中,以便下次他们玩游戏时读取。我怎样才能做到这一点?
4 回答
如果您只想在内部存储数据(即,跨会话保存,但不是作为用户可读文件),我会使用Preferences API。
例如:假设您有一个名为MissionInfo
which implements的类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
。
您可以使用java.util.Properties
,这是一个方便的实用程序,用于创建键和值的映射、将其存储在文件中以及Properties
从该文件加载相关对象。Properties
可以在此处找到有关使用 Java 处理文件的一个很好的教程。
要获取 AppData 目录文件路径(在 Windows 中),您可以使用System.getenv("APPDATA")
.
使用简单数据库:sqlite 或 Berkeley DB http://docs.oracle.com/cd/E17277_02/html/index.html
我建议您在用户主目录中创建一个特定于应用程序的文件夹,您可以使用以下代码获取该文件夹:
String userHome=System.getProperty("user.home");
这将为您提供一个类似于 c:\Documents and Settings\user1 的字符串,然后您可以先将您的应用程序名称附加到该字符串,例如“adventureapp”,并先使用正斜杠。然后从那。你可以这样做 :
File file = new File(mypathtomyappfolder);
然后你测试 .isDirectory() 如果不是,这是用户第一次运行 app do file.newDir() 所以你有你的冒险应用目录。然后从那里使用 File 并将文件名附加到您的字符串中,例如 user.properties,您可以根据他们在游戏中的进展对其进行读写。希望有帮助。- 邓肯