读取和写入文件android

时间:2016-01-10 17:40:57

标签: android file

我有下一个问题:

(1)如何检查文件是否存在?我是这样做的MainActivity onCreate

File f = new File("punteggio.txt");
if(f.exist())
   readFromFile();
else{
    writeToFile();
    readFromFile();
}

但它不起作用,因为每次打开我的应用程序文件都不存在。

(2)另一个问题。 在我的第一个活动中,我从文件中写入和读取没有问题,而在第二个活动中,当我从文件中读取字符串为空时。

主要活动

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textScore = (TextView) findViewById(R.id.textRecord);
    File f = new File("punteggio.txt");
    if (!f.exists()) {
        Log.d(TAG, "Writeee");
        writeToFile();
    } else {
        readFromFile();
    }
}

private void readFromFile() {
    String ret = "";
    try {
        FileInputStream fis = openFileInput("punteggio.txt");
        byte[] buffer = new byte[(int) fis.getChannel().size()];
        fis.read(buffer);
        String str = "";
        for (byte b : buffer) str += (char) b;
        fis.close();
        Log.d(TAG, str);
        textScore.setText("Record: " + str);
        Log.i("STACKOVERFLOW", String.format("GOT: [%s]", str));
    } catch (IOException e) {
        Log.e("STACKOVERFLOW", e.getMessage(), e);
    }
}

public void startGame(View v) {
    Intent i = new Intent(MainActivity.this, GamePanel.class);
    startActivity(i);
}

private void writeToFile() {
    String string = "0";
    try {
        FileOutputStream fos = openFileOutput("punteggio.txt", Context.MODE_PRIVATE);
        fos.write(string.getBytes());
        fos.flush();
        fos.close();
    } catch (IOException e) {
        Log.e(TAG, e.getMessage(), e);
    }
}

这是第二个活动

private int readFromFile() {
    String str = "";
    int i = 0;

    try {
        FileInputStream fis = openFileInput("punteggio.txt");
        byte[] buffer = new byte[(int) fis.getChannel().size()];
        fis.read(buffer);
        for (byte b : buffer) str += (char) b;
        i = Integer.parseInt(str);
        fis.close();
    } catch (IOException e) {
        Log.e("STACKOVERFLOW", e.getMessage(), e);
    }
    Log.d(TAG, "Stringa iiiii: " + i);
    return i;
}

变量是空的,为什么? 你能帮助我吗?感谢

1 个答案:

答案 0 :(得分:1)

回答(1) - 打开和写入文件取决于文件所在的位置,它可以在手机存储或SD卡中。因此,在实现读取文件系统时,应注意考虑文件的位置。这样,有时会导致错误,无法定位文件。 或者,更好的方法是使用共享偏好。

旁注:在文本文件中存储游戏分数很容易受到攻击,因为用户可以直接编辑文本文件中的分数并改变游戏结果。