2012-11-21 65 views
-2

我正在使用Java來做一個簡單的文本冒險。我希望能夠定義每個任務的進度,並且會在用戶下一次玩遊戲時讀取用戶的應用數據。我怎樣才能做到這一點?在java中存儲本地數據?

+0

你能更具體一點嗎?您是否想知道哪些API可以讓您執行此操作,或者您是否擔心跨連接保存的安全問題? – RonaldBarzell

+0

歡迎來到StackOverflow!關於SO的問題往往是涉及一些代碼的非常具體的問題。你的問題非常模糊;它可能會被拒絕甚至關閉。你能讓它更具體嗎?也許包括你已經嘗試過的一些代碼? –

+0

我不認爲你的遊戲有很多數據要存儲。整個存儲想法是製作一個文件,放入一些東西來表示你的位置,將它保存在硬盤上,然後在需要時檢索它。你想要做的第一件事是確定你需要存儲什麼以獲得你想要的結果。如果有一點點的信息,一個小文本文件就可以解決問題。如果它很多,那麼也許你會想要使用一個數據庫。下面的答案提供了一些很好的存儲技術,但是我想在推薦任何東西之前看到一些代碼。 – hyleaus

回答

0

您可以使用java.util.Properties,這是一個方便的工具,用於創建鍵和值的映射,將其存儲在文件中,並從該文件加載相關的Properties對象。有關使用Java的Properties和文件的一個很好的教程可以找到here

要獲取AppData目錄文件路徑(在Windows中),您可以使用System.getenv("APPDATA")

0

我會建議你創建位於用戶主目錄中的應用程序特定的文件夾,你可以用這個代碼得到:

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

那會給你一個類似於c:\ Documents and Settings \ user1的字符串,然後你可以用一個向前的斜槓將第一個字符串附加到你的應用程序名稱,例如「adventureapp」。然後從那。你可以這樣做:

File file = new File(mypathtomyappfolder); 

然後你測試,如果.isDirectory()如果​​不是,它是第一次用戶正在運行的應用程序都file.newDir(),所以你有你的adventureapp目錄。然後從那裏使用File並將一個文件名追加到你的字符串,比如user.properties,你可以根據它們在遊戲中的進展情況讀取和寫入。希望有所幫助。 - 鄧肯

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中找到它。

+0

我正在編組XML,但我沒有太多的運氣。我還沒有嘗試過其他的東西,因爲我是新手Java編碼器。 – user1840496

+0

如果您瞭解如何寫入XML,那麼您的問題是什麼? XML應該可以正常工作。 – wchargin