退出应用程序后,文件中存储的数据将被删除

时间:2014-09-02 23:44:04

标签: android

我正在使用此代码将数据保存到文件并从文件中读取数据:

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),当我在应用中时它工作正常,但当我退出应用并再次启动应用时,所有数据都是走了。

有人知道如何创建即使退出应用程序也会保存数据,以便在我再次启动应用程序时恢复数据吗?

另外,如果我希望保存的数据仅对我的应用程序可见,并且卸载后所有已保存的数据都会被删除,这是保存数据的正确方法吗?

1 个答案:

答案 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应用程序中做同样的事情,如果它仍然无法正常工作你做了别的错误,这不是保存文件的问题。