我的应用程序读取一堆文本文件。目前我已将它们全部保存在资产文件夹中,但我想在运行时编辑这些文件。
应该在第一次运行时将所有这些文件复制到内部存储中,或者我可以在 eclipse 中创建一个文件夹并保存文件。
如果是这样,读取它们的文件路径是什么?
谢谢。
我的应用程序读取一堆文本文件。目前我已将它们全部保存在资产文件夹中,但我想在运行时编辑这些文件。
应该在第一次运行时将所有这些文件复制到内部存储中,或者我可以在 eclipse 中创建一个文件夹并保存文件。
如果是这样,读取它们的文件路径是什么?
谢谢。
如果您将文件添加到 Eclipse 中的 Assets 文件夹中,它们将与您的应用程序一起加载,您可以在运行时使用
InputStream in = context.getAssets().open(filename);
然后你就可以像往常一样使用 InputStream 了。您可以使用 Activity 获取上下文getApplicationContext()
。
如果要写入文件:
FileOutputStream fOut = context.openFileOutput(fileName, Context.MODE_PRIVATE);
Android 为您提供所需的一切:如果您想节省外部存储空间,您可以简单地做
Environment.getExternalStorageDirectory().getPath()
我建议将其保存在缓存目录中并在需要时对其进行编辑,因为它似乎最适合您的需求。
getCacheDir().getPath()
但请注意:
注意:您不应依赖系统为您删除这些文件;您应该始终为缓存文件占用的空间量设置一个合理的最大值,例如 1 MB,并在超过该空间时修剪这些文件。
PS:您可以通过这种方式检查是否可以在外部目录上写入:
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// We can read and write the media
mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
// We can only read the media
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
// Something else is wrong. It may be one of many other states, but all we need
// to know is we can neither read nor write
mExternalStorageAvailable = mExternalStorageWriteable = false;
}
如图所示数据存储 如果可能的话,您可以简单地在外部目录上写入,否则回退到内部缓存。
您也可以在文件系统上的任何位置写入,但将文件设为您的应用程序私有
FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
您可以将文件保存在外部存储中:
Environment.getExternalStorageDirectory()
如您所述,您应该将这些文件复制到内部存储中。如果文件是应用程序私有的,则无需使用外部存储。当您说在 Eclipse 中将文件存储在文件夹中时,我认为您实际上是在谈论创建一个将随 APK 一起提供的文件夹。这样的文件将不可写。