文件存储数据是指在Android系统中,直接把数据以文件的形式存储在设备中。Android系统提供了openFileOutput(String name,int mode):第一个参数是用于指定文件名称,第二个参数是用于指定文件存储的方式。如果文件不存在,Android系统会为我们自动的创建它,创建的文件被保存在/data/data/
第二个参数也就是文件的打开方式有:
MODE_PRIVATE:默认打开方式,表示文件是私有数据,在默认模式下,只能被本身的应用访问,在默认模式下,新写入内容会覆盖原文件的内容。
MODE_APPEND:该模式会先检查数据文件是否存在,如果存在就在该数据文件内容基础上追加新的内容,否则就创建新数据文件。
MODE_WORLD_READABLE:该模式下数据文件可以其他应用读取。
MODE_WORLD_WRITEABLE:该模式下数据文件可以被其他应用读取与写入。
Context提供的几个重要方法:
getDir(String name,int mode):在应用程序的数据文件下获取或者创建name对应的子目录。
File getFilesDir:获取应用程序数据文件的绝对路径。
String[] fileList():返回应用程序数据文件夹的全部文件。
下面附带一个简单的栗子:
先看布局:
代码:
private EditText keyword;
private Button set_keyword;
private Button get_keyword;
private Button getDir;
private Button getFilesDir;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
keyword= (EditText) findViewById(R.id.keyword);
set_keyword= (Button) findViewById(R.id.set_keyword);
get_keyword= (Button) findViewById(R.id.get_keyword);
set_keyword.setOnClickListener(this);
get_keyword.setOnClickListener(this);
getDir= (Button) findViewById(R.id.getDir);
getFilesDir= (Button) findViewById(R.id.getFilesDir);
getDir.setOnClickListener(this);
getFilesDir.setOnClickListener(this);
}
@Override
public voidonClick(View v) {
switch(v.getId()){
caseR.id.set_keyword:
writeKeyworld(keyword.getText().toString());
Toast.makeText(MainActivity.this,"文件存储成功!",Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this,"文件的路径:"+getFilesDir(),Toast.LENGTH_SHORT).show();
break;
caseR.id.get_keyword:
Toast.makeText(MainActivity.this,readKeyworld().toString()+"",Toast.LENGTH_SHORT).show();
break;
caseR.id.getDir:
//在数据文件的目录下获取或者创建HelloAndroid的子目录(在HellAndroid目录不存在的时候)
Toast.makeText(MainActivity.this,"getDir:"+MainActivity.this.getDir("HelloAndroids", Context.MODE_PRIVATE),Toast.LENGTH_SHORT).show();
break;
caseR.id.getFilesDir:
//数据文件绝对路径
Toast.makeText(MainActivity.this,"getFilesDir:"+MainActivity.this.getFilesDir,Toast.LENGTH_SHORT).show();
break;
}
}
//使用openFileOutput指定打开指定文件,并指定写入模式
private voidwriteKeyworld(String msg) {
if(msg==""){
return;
}
try{
//通过openFileOutput拿到io流的FileOutputString对象
FileOutputStream fos=this.openFileOutput("message.txt",MODE_APPEND);
fos.write(msg.getBytes());
fos.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
//使用openFileInput打开指定文件
privateString readKeyworld() {
String data="";
try{
FileInputStream fis=this.openFileInput("message.txt");
byte[] buffer=new byte[1024];
inthasRead=0;
StringBuilder sb=newStringBuilder();
while((hasRead=fis.read(buffer))!=-1){
sb.append(newString(buffer,0,hasRead));
}
data=sb.toString();
fis.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
returndata;
}
运行结果:
上面这个栗子只包括android文件存储的使用内置内存存储。那么问题来,怎么把数据存储在sd卡里边呢?下片博文说吧。