Android数据持久化存储-Files对象

1、Files对象保存数据的分类

(1)、使用IO流进行存储,保存在/data/data/包名/files/目录下。
(2)、使用Environment类进行存储,保存在SD卡中。

2、IO流方式存取数据

    使用IO流方式存取数据,即使用FileOutputStream类提供的openFileOutput()方法获取输出流,输出文件到磁盘;使用FileInputStream类提供的openFileInput()方法获取输入流,读取磁盘文件。
  下面通过示例说明如何使用IO流方式存取数据:
     ①保存数据
public void writeFilesData() {
    String username = "hello";
    String password = "world";
    FileOutputStream fos = null;
try {
//获取文件输出流
fos = openFileOutput("user", MODE_PRIVATE);
try {
            fos.write((username + "," + password).getBytes());
            fos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
if (fos != null) {
try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
    ②读取数据
private void readFilesData() {
    FileInputStream fis = null;
byte[] buffer = null;
try {
//获取文件输入流
fis = openFileInput("user");
try {
int size = fis.available();
            buffer = new byte[size];
            fis.read(buffer);
//获取保存的数据
String data = new String(buffer, "UTF-8");
            String[] split = data.split(",");
            String username = split[0];
            String password = split[1];
        } catch (IOException e) {
            e.printStackTrace();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
if (fis != null) {
try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

3、使用Environment类进行存储

    每个Android设备都支持使用共享的外部存储来保存文件,这可以是SD卡等可以移除的存储介质,也可以是手机内存等不可以移除的存储介质。对SD卡的操作,需要使用 Environment类的getExternalStorageDirectory()方法,该方法用来获取外部存储器的目录。
     访问外部存储器需要以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  以下给出示例代码说明如何使用:
  ①保存数据到SD卡
private void writeSDCard() {
boolean mounted = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if (mounted) {
        File root = Environment.getExternalStorageDirectory();
if (root.exists() && root.canWrite()) {
            File file = new File(root, "user.txt");
try {
boolean newFile = file.createNewFile();
if (newFile) {
                    Toast.makeText(mContext, "创建成功!", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(mContext, "创建失败!", Toast.LENGTH_SHORT).show();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            Toast.makeText(mContext, "SD卡不存在或者不可写!", Toast.LENGTH_SHORT).show();
        }
    } else {
        Toast.makeText(mContext, "SD卡不存在!", Toast.LENGTH_SHORT).show();
    }
}
  ②读取SD卡数据
private void readSDCard() {
boolean mounted = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if (mounted) {
        File root = Environment.getExternalStorageDirectory();
if (root.exists() && root.canRead()) {
            File file = new File(root, "root");
            FileInputStream fis = null;
try {
//获取输入流
fis = new FileInputStream(file);
byte[] buffer = null;
try {
int size = fis.available();
                    buffer = new byte[size];
                    fis.read(buffer);
                    String data = new String(buffer, "UTF-8");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }finally {
if (fis!=null){
try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        } else {
            Toast.makeText(mContext, "SD卡不存在或者不可读!", Toast.LENGTH_SHORT).show();
        }
    } else {
        Toast.makeText(mContext, "SD卡不存在!", Toast.LENGTH_SHORT).show();
    }
}

微信公众号:Android及IOS开发
(欢迎关注,第一时间推送博文信息) 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值