2013-01-01 100 views
2

我製作了一個Java applet /應用程序遊戲,應該保存用戶可以創建到本地機器的級別。 我說小程序/應用程序,因爲它可以作爲應用程序或作爲小程序運行。 目前我使用這個寫入文件:用Java存儲本地機器的保存文件的位置

BufferedWriter bf = new BufferedWriter(new FileWriter("Circles/levels/level.txt")); 
for (int i = 0; i < lines.size(); i++) { 
    bf.write(lines.get(i)); 
    bf.newLine(); 
} 

線與線的ArrayList寫入文件。

FileReader fr = new FileReader("Circles/levels/level.txt"); 
     BufferedReader bf = new BufferedReader(fr); 
     lines = new ArrayList<String>(); 
     while (true) { 
      String line = bf.readLine(); 
      if (line == null) { 
       break; 
      } 
      lines.add(line); 
     } 
     bf.close(); 

讀取文件。那些被圍繞在try/catch循環中,我只是展示了我必須要做的。

這可以正常工作,但它似乎是在不同操作系統上完全不同的位置,並且應用程序與Applet存儲在不同的位置。

我想要一個方法來獲得一個地方的絕對路徑來保存水平,不管在哪裏運行java程序都不會改變,而且如果將它作爲應用程序運行並且作爲小程序。在所有操作系統上(linux,windows,mac)都可以做這項工作。

+0

我沒有你的問題的答案,但更容易和優雅的方式來編寫/讀取文件的級別將是[序列化](http://www.tutorialspoint.com/java/java_serialization.htm )。只是一個提示,讓您的生活更輕鬆:) – Aaron

回答

5

applet根本沒有位置來保存數據,所以如果你想作爲一個applet運行,你必須避免這種情況,很簡單。小程序沙箱完全阻止文件系統訪問。你需要調用服務器來保存你的數據。

至於獨立應用程序,我也很抱歉地說沒有完全可以接受的約定。但是,創建在用戶的主目錄dotfile目錄通常被認爲接受做法在Linux,OSX和Windows:

public static final File savedir = new File(new File(System.getProperty("user.home")), ".yourgame"); 

然後,從中導出您的文件名:

FileReader fr = new FileReader(new File(savedir, "level.txt")); 

雖然作品,但它不完全是Windows程序通常會做的。

+0

好的,謝謝!除了約定之外,applet是否有理由不保存數據?由於該腳本似乎適用於applet和應用程序,如果我簽署了我的.jar文件。 – daboross

+0

如果您的Jar文件已簽名,它可能確實有效。我認爲你沒有簽名,因爲大多數小程序都是無符號運行的(以避免用安全對話框來纏住用戶)。 – Dolda2000

+0

@DaboRoss - 注意如果用戶不接受證書,你的小程序將無法正常工作。 – wulfgarpro