2014-05-01 64 views
0

将socresres保存到highscore.sav文件,它在桌面上工作正常,但在android上不起作用。为什么?它可以在桌面上正常工作,但不适用于android。为什么?

String fileName = "highScores.sav"; 

file = new File(fileName); 

public static void save(){ 

     try{ 
      FileOutputStream fileOut = new FileOutputStream(file); 
      ObjectOutputStream out = new ObjectOutputStream(fileOut); 
      out.writeObject(gd); 
      out.close(); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
      System.out.println(e); 
      Gdx.app.exit(); 
     } 
    } 

    public static void load(){ 

     try{ 
      if(!saveFileExists()){ 
       init(); 
       return; 
      } 
      FileInputStream fileIn = new FileInputStream(file); 
      ObjectInputStream in = new ObjectInputStream(fileIn); 
      gd = (GameData) in.readObject(); 
      in.close(); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
      System.out.println(e); 
      Gdx.app.exit(); 
     } 
    } 

遇到错误:java.io.FileNotFoundException:/highScores.sav:打开失败:EROFS(只读文件系统)

+0

是你会说当你这样做创建你的文件吗? – njzk2

+0

你的问题是什么? – ElectronicGeek

+0

请发布堆栈跟踪。很难弄清楚其他情况会发生什么。 – Shlublu

回答

0

这不起作用,因为您尚未指定要保存的目录。 Android对应用可以写入文件的位置有严格的限制。

您不需要任何权限即可将文件读取或写入内部存储器。但是您确实需要指定内部内存(在libgdx中称为本地内存)。

Libgdx已经直接为您处理这个,所以你不需要电脑和Android之间的区分。 This explains exactly how to do it.所有你需要的是字符串或要写入文件的字节,并libgdx API的处理其余部分。

FileHandle file = Gdx.files.local(filename); 
file.writeString(stringToWrite, false); 

如果你想继续使用写入文件的方法,你可以得到的路径,像这样的文件:

String fileName = "highScores.sav"; 
file = new File(Gdx.files.getLocalStoragePath() + "/" + fileName); 
+0

现在的工作,非常感谢! – fabo9527

0

你有没有添加权限的Android应用程序,允许写入储存空间?

+0

我该怎么办呢? – fabo9527

+0

添加到您的清单文件:<使用许可权的android:NAME = “android.permission.READ_EXTERNAL_STORAGE”/>。更多信息可以在这里找到:http://developer.android.com/training/basics/data-storage/files.html – Matt

相关问题