我正在使用Java来做一个简单的文本冒险。我希望能够定义每个任务的进度,并且会在用户下一次玩游戏时读取用户的应用数据。我怎样才能做到这一点?在java中存储本地数据?
回答
您可以使用java.util.Properties
,这是一个方便的工具,用于创建键和值的映射,将其存储在文件中,并从该文件加载相关的Properties
对象。有关使用Java的Properties
和文件的一个很好的教程可以找到here。
要获取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()如果不是,它是第一次用户正在运行的应用程序都file.newDir(),所以你有你的adventureapp目录。然后从那里使用File并将一个文件名追加到你的字符串,比如user.properties,你可以根据它们在游戏中的进展情况读取和写入。希望有所帮助。 - 邓肯
如果您只是想在内部存储数据(即跨会话保存,而不是用户可读的文件),我会使用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
中找到它。
我正在编组XML,但我没有太多的运气。我还没有尝试过其他的东西,因为我是新手Java编码器。 – user1840496
如果您了解如何写入XML,那么您的问题是什么? XML应该可以正常工作。 – wchargin
- 1. 从本地存储mysql存储数据
- 2. 在本地存储缓存数据
- 3. 存储本地数据
- 4. 最佳实践将数据存储在本地存储中
- 5. 如何删除存储在本地存储中的数据?
- 6. HTML5数据不是在本地存储中存储
- 7. 未将数据存储在本地存储中
- 8. 在pList或本地文件夹中本地存储数据
- 9. iOS在本地存储数据
- 10. 在iPhone上本地存储数据
- 11. 数据存储在本地的iphone
- 12. Android:是否在本地存储数据?
- 13. Silverlight在本地存储数据
- 14. 如何在本地存储数据?
- 15. 在设备上本地存储数据
- 16. 在本地存储大量数据
- 17. 在Python本地存储数据
- 18. 将数据保存到本地存储
- 19. 将数据保存到本地存储
- 20. 如何将本地Google App Engine Python数据存储复制到本地Google App Engine Java数据存储?
- 21. WP8:本地存储或孤立存储来存储数据?
- 22. Clent-side数据存储,DOM存储或HTML5本地存储?
- 23. App dev - 将Shopify数据存储在本地数据库中
- 24. 将java对象存储在HTML5本地存储中
- 25. 存储下拉选择数据在本地存储使用javascript
- 26. 数据存储在本地主机上,但不在gae数据存储上?
- 27. 如何在Iphone中使用phonegap在“本地存储”中存储批量数据
- 28. 将数据存储在数组中(Java)
- 29. Java中的数据存储
- 30. 如何在本地内存中存储动态数据:Android
你能更具体一点吗?您是否想知道哪些API可以让您执行此操作,或者您是否担心跨连接保存的安全问题? – RonaldBarzell
欢迎来到StackOverflow!关于SO的问题往往是涉及一些代码的非常具体的问题。你的问题非常模糊;它可能会被拒绝甚至关闭。你能让它更具体吗?也许包括你已经尝试过的一些代码? –
我不认为你的游戏有很多数据要存储。整个存储想法是制作一个文件,放入一些东西来表示你的位置,将它保存在硬盘上,然后在需要时检索它。你想要做的第一件事是确定你需要存储什么以获得你想要的结果。如果有一点点的信息,一个小文本文件就可以解决问题。如果它很多,那么也许你会想要使用一个数据库。下面的答案提供了一些很好的存储技术,但是我想在推荐任何东西之前看到一些代码。 – hyleaus