在安卓中对数据的存储有了SQLite数据库存储数据,在本次学习的是对文件的存储。利用SharedPerences将数据存储在文件中。
实战:本次学习准备的实战是总结性写了一下数据内部存储的读写、文件内部存储的读写、在SD卡中的读写。
public static int MODE = MODE_PRIVATE;
public static int MODE = Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE;
public static final String PREFERENCE_NAME = "SaveSetting";
SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME, MODE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("Name", "Tom");
editor.putInt("Age", 20);
editor.putFloat("Height", );
editor.commit();
SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME, MODE);
String name = sharedPreferences.getString("Name","Default Name");
int age = sharedPreferences.getInt("Age", 20);
float height = sharedPreferences.getFloat("Height",);
Android使用的是基于Linux的文件系统,程序开发人员可以建立和访问程序自身的私有文件,也可以访问保存在资源目录中的原始文件和XML文件,还可以在SD卡等外部存储设备中保存文件。
public FileOutputStream openFileOutput(String name, int mode)
第1个参数是文件名称,这个参数不可以包含描述路径的斜杠
第2个参数是操作模式
函数的返回值是FileOutputStream类型
Android系统支持四种文件操作模式
模式 | 说明 |
---|---|
MODE_PRIVATE | 私有模式,缺省模式,文件仅能够被文件创建程序访问,或者具有相同UID的程序访问。 |
MODE_APPEND | 追加模式,如果文件已经存在了,则在该文件的结尾处添加新数据。 |
MODE_WORLD_READABLE | 全局读模式,允许任何程序读取私有文件 |
MODE_WORLD_WRITEABLE | 全局写模式,允许任何程序写入私有文件。 |
使用openFileOutput()函数建立新文件的示例代码如下
String FILE_NAME = "fileDemo.txt";
FileOutputStream fos =openFileOutput(FILE_NAME,Context.MODE_PRIVATE)
String text = “Some data”;
fos.write(text.getBytes());
fos.flush();
fos.close();
第1行代码定义了建立文件的名称fileDemo.txt
第2行代码使用openFileOutput()函数以私有模式建立文件
第4行代码调用write()函数将数据写入文件
第5行代码调用flush()函数将所有剩余的数据写入文件
第6行代码调用close()函数关闭FileOutputStream
为了提高文件系统的性能,一般调用write()函数时,如果写入的数据量较小,系统会把数据保存在数据缓冲区中,等数据量累积到一定程度时再一次性的写入文件中
由上可知,在调用close()函数关闭文件前,务必要调用flush()函数,将缓冲区内所有的数据写入文件
public FileInputStream openFileInput (String name)
第1个参数也是文件名称,同样不允许包含描述路径的斜杠
使用openFileInput ()函数打开已有文件的示例代码如下
String FILE_NAME = "fileDemo.txt";
FileInputStream fis = openFileInput(FILE_NAME);
byte[] readBytes = new byte[fis.available()];
while(fis.read(readBytes) != -1){
}
Android的外部存储设备指的是SD卡(Secure Digital Memory Card),是一种广泛使用于数码设备上的记忆卡。不是所有的Android手机都有SD卡,但Android系统提供了对SD卡的便捷的访问方法。SD卡适用于保存大尺寸的文件或者是一些无需设置访问权限的文件,可以保存录制的大容量的视频文件和音频文件等SD卡使用的是FAT(File Allocation Table)的文件系统,不支持访问模式和权限控制,但可以通过Linux文件系统的文件访问权限的控制保证文件的私密性Android模拟器支持SD卡,模拟器中有缺省的SD卡,如果想在多个模拟器中共享相同的SD卡,则开发人员须在模拟器中手工添加SD卡的映像文件。
在这里我主要针对此次学习给出了实战代码,该代码实现了数据的文件存储的读写。
public class FileActivity extends AppCompatActivity {
public static int MODE = MODE_PRIVATE; //设置私有模式
//设置全局读、全局写两种模式
public static int MODE_twe = Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE;
//设置SharedPreferences的名称.在使用SharedPreferences时,需要给出名称作为参数,该名称相同就会保存在同一个文件中
public static final String PREFERECE_NAME = "mypref";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file);
}
public void writePref(View view){
/**
* 写数据(二进制类型)
*/
//使用getSharedPreferences方法,传输文件名称,类型。获取到SharedPreferences对象
SharedPreferences sharedPreferences = getSharedPreferences(PREFERECE_NAME,MODE_APPEND);
//使用Editor类来对SharedPreferences进行修改
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("ip","192.168.1.106");
editor.putString("port","8080");
editor.commit();//进行保存
}
public void readPref(View view){
/**
* 读数据
*/
//使用getSharedPreferences方法,传输文件名称,类型。获取到SharedPreferences对象
SharedPreferences sharedPreferences = getSharedPreferences(PREFERECE_NAME,MODE_APPEND);
//使用getXXX的方法直接读取数据,第二个参数是默认参数()当读取不成功时的取值
String ip = sharedPreferences.getString("ip","");
String port = sharedPreferences.getString("port","");
Toast.makeText(this,"ip:"+ip+"port:"+port,Toast.LENGTH_SHORT).show();
}
/**
* 下面读写的文件都是保存在内部存储器上的。Linux系统下的/data/data//files目录中
*/
public void writeFile(View view){
/**
* 写文件openFileOutput
*/
try{
FileOutputStream fileOutputStream = openFileOutput(PREFERECE_NAME,MODE_APPEND);
String content = "fileContent";
fileOutputStream.write(content.getBytes());
fileOutputStream.flush();
}catch(Exception e){
Log.e(FileActivity.class.toString(),e.toString());
}
}
public void readFile(View view){
/**
* 读文件openFileInput
*/
try {
FileInputStream fileInputStream = openFileInput(PREFERECE_NAME);
byte[] bytes = new byte[fileInputStream.available()];
fileInputStream.read(bytes);
String content = new String(bytes);
Toast.makeText(this,content,Toast.LENGTH_SHORT).show();
}catch (Exception e){
Log.e(FileActivity.class.toString(),e.toString());
}
}
public void writeSD(View view){
/**
* 写SD卡文件
*/
try {
File file = new File(Environment.getExternalStorageDirectory(),"mysdfile");
file.createNewFile();
if(file.exists()&&file.canWrite()){
FileOutputStream fileOutputStream = new FileOutputStream(file);
String content = "fileContent.txt";
fileOutputStream.write(content.getBytes());
fileOutputStream.flush();
fileOutputStream.close();
}
}catch (Exception e){
Log.e(FileActivity.class.toString(),e.toString());
}
}
}