我正在使用此代码将数据保存到文件并从文件中读取数据:
public static void save(FileIO files) {
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(
files.writeFile(".save")));
for (int i = 0; i < 20; i++) {
out.write(Integer.toString(scores[i]));
out.write("\n");
}
} catch (IOException e) {
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
}
}
}
public static void load(FileIO files) {
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(
files.readFile(".save")));
for (int i = 0; i < 20; i++) {
scores[i] = Integer.parseInt(in.readLine());
}
} catch (IOException e) {
} catch (NumberFormatException e) {
} finally {
try {
if (in != null)
in.close();
} catch (IOException e) {
}
}
}
FileIO.java
package com.avoidblocks.avoidblocks.framework;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.SharedPreferences;
public interface FileIO {
public InputStream readFile(String file) throws IOException;
public OutputStream writeFile(String file) throws IOException;
public InputStream readAsset(String file) throws IOException;
public SharedPreferences getSharedPref();
}
我在应用中多次调用save(FileIO files)
和load(FileIO files)
,当我在应用中时它工作正常,但当我退出应用并再次启动应用时,所有数据都是走了。
有人知道如何创建即使退出应用程序也会保存数据,以便在我再次启动应用程序时恢复数据吗?
另外,如果我希望保存的数据仅对我的应用程序可见,并且卸载后所有已保存的数据都会被删除,这是保存数据的正确方法吗?
答案 0 :(得分:0)
EDIT - 编辑编辑: 好吧,你的FileIO文件变量,看起来是错的, 你用什么来获得这个变量?
应该是
context.openFileOutput(".save", Context.MODE_PRIVATE)
用于保存和
context.openFileInput(".save")
用于加载
它应该是FileOutputStream for save和FileInputStream for read而不是FileIO。 当将它添加到流中时,只需将其传入。
所以在你的代码中你应该像这样创建BufferedWriter:
out = new BufferedWriter(new OutputStreamWriter(
context.openFileOutput(".save", Context.MODE_PRIVATE)));
并像这样创建BufferedReader:
in = new BufferedReader(new InputStreamReader(
context.openFileInput(".save")));
==================编辑:我的测试代码=================
好的,我创建了一个活动并创建了以下两个方法并声明了一个int数组:
public static int scores[] = {11,12,13,14,15};
public static void save(Context context) {
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(
context.openFileOutput(".saveingTest", Context.MODE_PRIVATE)));
for (int i = 0; i < scores.length; i++) {
out.write(Integer.toString(scores[i]));
out.write("\n");
}
} catch (IOException e) {
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
}
}
}
public static void load(Context context) {
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(
context.openFileInput(".saveingTest")));
for (int i = 0; i < scores.length; i++) {
Log.d("testingApp", "test: " + Integer.parseInt(in.readLine()));
// scores[i] = Integer.parseInt(in.readLine());
}
} catch (IOException e) {
} catch (NumberFormatException e) {
} finally {
try {
if (in != null)
in.close();
} catch (IOException e) {
}
}
}
在我的onCreate中我有以下两行代码:
save(this);
load(this);
测试我做了以下事情:
注释掉onCreate中的加载,运行应用程序,而不是我删除了加载注释并注释掉了onCreate并且我更改了score变量中的数字(这是不必要的,但我还是做了)并运行了应用程序,结果是在eclipse上的android日志查看器窗口内,第一次运行应用程序时得分的int值。如果你不想评论和运行,你也可以使用触发保存和加载的按钮。
自己尝试,它应该工作,并确保你在你的实际Android应用程序中做同样的事情,如果它仍然无法正常工作你做了别的错误,这不是保存文件的问题。