2012-10-06 25 views
1

我的应用程序读取一堆文本文件。目前我已将它们全部保存在资产文件夹中,但我想在运行时编辑这些文件。Android在哪里存储可编辑文件

应该在第一次运行时将所有这些文件复制到内部存储器中,或者我可以在eclipse中创建一个文件夹并保存文件。

如果是这样的话,将会有什么文件路径来读取它们?

谢谢。

回答

1

如果您在Eclipse中添加文件到您的资产文件夹,它们将被装入您的应用程序,你可以访问他们在运行时与

InputStream in = context.getAssets().open(filename); 

然后你可以像往常一样使用InputStream。您可以通过getApplicationContext()获取活动中的上下文。

如果你想写入文件:如果你想在外部存储保存你可以简单地做

Environment.getExternalStorageDirectory().getPath() 

什么,我会建议是 :

FileOutputStream fOut = context.openFileOutput(fileName, Context.MODE_PRIVATE); 
+0

谢谢,我想我会这样做。首先我会将文件复制到另一个文件夹,然后编辑它们。 – user557240

+0

好吧,也许你可以接受答案,如果它的工作:) – Puckl

+0

完成,我要去尝试它。 – user557240

0

您可以将文件保存在外部存储:

Environment.getExternalStorageDirectory()

1

Android为您提供您所需要的一切将其保存在缓存目录中并在需要时进行编辑,因为它似乎最适合您的需求。

getCacheDir().getPath() 

但确实指出:

注意:你不应该依赖系统中删除这些文件,你的;对于缓存文件占用的空间量,您应始终拥有合理的最大值(例如1 MB),并在超过该空间时修剪这些文件。

PS:你可以检查,如果你能在外部目录写这种方式:如图所示data storage

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); 
+0

感谢您的详细回复。由于数据不是那么大,我只是坚持使用内部存储。 – user557240

0

你应该为你所提到的这些文件复制到内部存储器。如果文件对应用程序是私有的,则不需要使用外部存储。当你说在Eclipse中将文件存储在一个文件夹中时,我认为你确实在讨论如何创建将随APK一起提供的文件夹。这样的文件不会被写入。