如何将数组写入内部存储的文本文件?

5

我需要将一些数据存储为文本文件在内部存储器上。 例如下面,我有一个按钮,每次点击该按钮时,我想要保存一些数据到一个文本文件中。我正在测试一个示例:

http://developer.android.com/training/basics/data-storage/files.html

import java.io.FileOutputStream;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {
    Button b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b = (Button) findViewById(R.id.button1);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        String filename = "myfile";
        String string = "Hello world!";
        FileOutputStream outputStream;

        try {
          outputStream = openFileOutput(filename, Context.MODE_APPEND);
          outputStream.write(string.getBytes());
          outputStream.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
    }
}

我只把“mode_private”改为“mode_append”,这样我就可以看到已保存的文件,但我找不到已保存的文件,甚至找不到应该保存文件的目录。
另外,更具体地说,我需要将数字数组存储在文本文件中(比如i={1,2,3}保存到output.txt文件中)。如果您能帮忙解决问题,我将不胜感激。

关于文件保存的位置,请参见此线程 - Ted Hopp
1个回答

3
首先,您缺少按钮的setOnClickListener。应该是...
b = (Button) findViewById(R.id.button1);
b.setOnClickListener(this);

"但我找不到保存的文件,甚至找不到应该保存文件的目录。"

getApplicationContext().getFilesDir()会告诉你文件保存的位置。

Android文档说...

您的应用程序的内部存储目录由Android文件系统的特殊位置中的应用程序包名称指定。

要将数组存储在文件中,请尝试以下操作...

String filename = "myfile";
String[] numbers = new String[] {"1, 2, 3"};
FileOutputStream outputStream;

try {
  outputStream = openFileOutput(filename, Context.MODE_APPEND);
  for (String s : numbers) {  
      outputStream.write(s.getBytes());  
  } 
  outputStream.close();
} catch (Exception e) {
  e.printStackTrace();
}

谢谢你的回答,我使用getApplicationContext().getFilesDir()找到了目录,但似乎这个路径并没有被创建,所以当我浏览文件夹查看保存的文件时,无法找到它,有什么想法吗?关于你的代码,我应该能够在应用程序保存的目录下找到一个名为“myfile”的文件,对吗? - kaman
不好意思,据我所知,您无法在目录下看到该文件。openFileOutput 会将其存储在应用程序的内部存储目录中。唯一可以访问该文件的方式是使用 Context。如果您要访问实际文件,则应将其存储在外部。 - neo108
我刚刚测试了相同的代码,但这次使用模拟器,我能够看到实际的文件并从设备中提取它。似乎当我使用实际设备而不是模拟器时,我无法看到它。无论如何,谢谢,我会尝试看看是否可以将文件存储在外部,并且如果遇到问题,我会再次向您询问。 - kaman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接