我正在使用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. AngularJs:在本地存儲中存儲和檢索數據
- 7. HTML5數據不是在本地存儲中存儲
- 8. 未將數據存儲在本地存儲中
- 9. 在pList或本地文件夾中本地存儲數據
- 10. Silverlight在本地存儲數據
- 11. Android:是否在本地存儲數據?
- 12. 如何在iPhone本地存儲數據
- 13. 如何在本地存儲數據?
- 14. iOS在本地存儲數據
- 15. 在Python本地存儲數據
- 16. 在iPhone上本地存儲數據
- 17. 在設備上本地存儲數據
- 18. 在本地存儲大量數據
- 19. 數據存儲在本地的iphone
- 20. 如何將數據存儲爲本地存儲中的數組?
- 21. 將數據保存到本地存儲
- 22. 將數據保存到本地存儲
- 23. 如何將本地Google App Engine Python數據存儲複製到本地Google App Engine Java數據存儲?
- 24. Clent-side數據存儲,DOM存儲或HTML5本地存儲?
- 25. 將java對象存儲在HTML5本地存儲中
- 26. App dev - 將Shopify數據存儲在本地數據庫中
- 27. 如何在本地數據存儲中解析關係數據?
- 28. 如何使用HTML中的本地存儲在數組中存儲數據?
- 29. 存儲下拉選擇數據在本地存儲使用javascript
- 30. 顯示存儲在本地存儲到另一頁的數據
你能更具體一點嗎?您是否想知道哪些API可以讓您執行此操作,或者您是否擔心跨連接保存的安全問題? – RonaldBarzell
歡迎來到StackOverflow!關於SO的問題往往是涉及一些代碼的非常具體的問題。你的問題非常模糊;它可能會被拒絕甚至關閉。你能讓它更具體嗎?也許包括你已經嘗試過的一些代碼? –
我不認爲你的遊戲有很多數據要存儲。整個存儲想法是製作一個文件,放入一些東西來表示你的位置,將它保存在硬盤上,然後在需要時檢索它。你想要做的第一件事是確定你需要存儲什麼以獲得你想要的結果。如果有一點點的信息,一個小文本文件就可以解決問題。如果它很多,那麼也許你會想要使用一個數據庫。下面的答案提供了一些很好的存儲技術,但是我想在推薦任何東西之前看到一些代碼。 – hyleaus