文件存储数据使用了Java中的IO操作来进行文件的保存和读取,android的ContextWrapper封装了获取输入流和输出流的方法,这样一来,在每个Activity中都可以实现文件存储。在android中,可以把文件存储在设备的内部存储空间,也可以存储在扩展的内存上,对于某些为了界面的友好性或则日志文件,还可以存储在缓存里,但这些的文件可以被其他的程序访问。
在android中,开发者可以直接使用设备的内部存储空间存储文件,默认情况下,这种方法保存的文件只能被本程序访问,当用户卸载该程序是,这些文件一并被删除。
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
public class FileDemo extends Activity
{
private String fileName = "test.txt";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
save(fileName, "~~~内部存储方式~~~");
String content = read(fileName);
Log.e("content", content);
}
/**
* 内部存储
* @param fileName:文件名
* @param content:需要写入的数据
*/
public void save(String fileName,String content)
{
/**
* 使用内部存储时,文件是存储在/data/data/<package name>/files
* 可以用getFilesDir().getPath()查看存储路径
*/
try
{
/**
* openFileOutput()方法的第二参数用于指定操作模式,有四个可选参数:
* Context.MODE_PRIVATE=0:默认操作模式,代表该文件是私有数据,只能被应用本身访问
* 在该模式下,写入的内容会覆盖原文件的内容
* Context.MODE_WORLD_READABLE=1:表示当前文件可以被其他应用读取
* Context.MODE_WORLD_WRITEABLE=2:表示当前文件可以被其他应用写入
* Context.MODE_APPEND=32768:该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
* 如果要设置文件为可读写,可以设置为:Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE
*/
FileOutputStream fos = openFileOutput("test.txt", Context.MODE_PRIVATE);
fos.write(content.getBytes("UTF-8"));
} catch (Exception e)
{
e.printStackTrace();
}
}
/**
* 读取文件数据
* @param fileName
* @return:读取数据内容
*/
public String read(String fileName)
{
String content = null;
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
try
{
fis = openFileInput(fileName);
bos = new ByteArrayOutputStream();
int length = 0;
byte[] buffer = new byte[1024];
while((length = fis.read(buffer))!= -1)
{
bos.write(buffer, 0, length);
}
content = bos.toString("UTF-8");
} catch (Exception e)
{
e.printStackTrace();
}finally{
try
{
bos.close();
fis.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
return content;
}
}
在File Explore视图下的/data/data/<package name>/files路径下,可以找到我们写入的文件test.txt,如下图:
但有的时候,保存的文件很大,如一些音频视频文件,这个时候,如果把这些文件放在内部存储空间中,会很大程度上影响设备的运行速度,这个时候,就需要把这些文件存储在外部存储空间中。外部存储中的文件是可以被用户或者其他应用程序修改的,关于外部存储可以参考android中的文件操作详解以及内部存储和外部存储,这里就不作详述。