Android 在sd卡上保存数据
我正在编写一个小游戏,我想在sd卡上保存分数和音量(启用或禁用) 我的两个功能的代码是:Android 在sd卡上保存数据,android,Android,我正在编写一个小游戏,我想在sd卡上保存分数和音量(启用或禁用) 我的两个功能的代码是: public static void load(FileIO files) { BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader( files.readFile(".save"))); soundEnabled = Bool
public static void load(FileIO files) {
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(
files.readFile(".save")));
soundEnabled = Boolean.parseBoolean(in.readLine());
for (int i = 0; i < 5; i++) {
highscores[i] = Integer.parseInt(in.readLine());
}
} catch (IOException e) {
// :( It's ok we have defaults
} catch (NumberFormatException e) {
// :/ It's ok, defaults save our day
} finally {
try {
if (in != null)
in.close();
} catch (IOException e) {
}
}
}
这里有两个问题。首先,out.write不会在每次调用结束时插入换行符,您必须手动执行此操作。因此,当您在cal中执行readline以解析实际使用文件中所有数据的布尔值时,会发生什么。其次,您需要在离开该函数之前刷新并关闭文件,以确保不会在缓冲区中留下任何数据 下面是应该可以工作的保存重写:
public static void save(FileIO files) {
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(
files.writeFile(".mrnom")));
out.write(Boolean.toString(soundEnabled));
out.write("\n");
for (int i = 0; i < 5; i++) {
out.write(Integer.toString(highscores[i]));
out.write("\n");
}
out.flush();
out.close();
} catch (IOException e) {
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
}
}
}
publicstaticvoidsave(FileIO文件){
BufferedWriter out=null;
试一试{
out=新的BufferedWriter(新的OutputStreamWriter(
writeFile(“.mrnom”);
out.write(Boolean.toString(soundEnabled));
输出。写入(“\n”);
对于(int i=0;i<5;i++){
out.write(整数.toString(高分[i]);
输出。写入(“\n”);
}
out.flush();
out.close();
}捕获(IOE异常){
}最后{
试一试{
if(out!=null)
out.close();
}捕获(IOE异常){
}
}
}
我是第一次编程,但iv使用共享pref解决了这个问题。这样可以避免在更新应用程序时丢失数据。您确定文件正在写入吗?您设置了正确的权限吗?您将关闭文件两次,实际上不需要调用flush
,close
会为您执行此操作。
public class AndroidFileIO implements FileIO {
Context context;
AssetManager assets;
String externalStoragePath;
public AndroidFileIO(Context context) {
this.context = context;
this.assets = context.getAssets();
this.externalStoragePath = Environment.getExternalStorageDirectory()
.getAbsolutePath() + File.separator;
}
public InputStream readAsset(String fileName) throws IOException {
return assets.open(fileName);
}
public InputStream readFile(String fileName) throws IOException {
return new FileInputStream(externalStoragePath + fileName);
}
public OutputStream writeFile(String fileName) throws IOException {
return new FileOutputStream(externalStoragePath + fileName);
}
public SharedPreferences getPreferences() {
return PreferenceManager.getDefaultSharedPreferences(context);
}
}
public static void save(FileIO files) {
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(
files.writeFile(".mrnom")));
out.write(Boolean.toString(soundEnabled));
out.write("\n");
for (int i = 0; i < 5; i++) {
out.write(Integer.toString(highscores[i]));
out.write("\n");
}
out.flush();
out.close();
} catch (IOException e) {
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
}
}
}