它在桌面上运行良好,但在android上运行不正常。为什么?

时间:2014-05-01 13:05:26

标签: android

将socres保存到highscore.sav文件,它在桌面上运行正常,但在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:open failed:EROFS(只读文件系统)

2 个答案:

答案 0 :(得分:0)

您是否已将权限添加到Android应用以允许写入存储空间?

答案 1 :(得分: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);