Android数据存储方式一:sharedprefrence存储,外部存储,内部存储

Android数据存储方式

SharedPrefrence存储

说明

SP存储专门用来存储一些单一的小数据

存储数据的类型: boolean, float, int, long, String

数据保存的路径: /data/data/packageName/shared_prefs/yyy.xml

可以设置数据只能是当前应用读取, 而别的应用不可以

应用卸载时会删除此数据

相关API
SharedPreferences: 对应sp文件的接口

context. getSharedPreferences (String name, int mode): 得到SP对象

name: 文件名(不带.xml)

mode: 生成的文件模式(是否是私有的,即其它应用是否可以访问)

Editor sp.edit() : 得到Editor对象

Xxx sp.getXxx(name,defaultValue): 根据name得到对应的数据

Editor : 能更新sp文件的接口

Editor put(name, value) : 保存一个键值对, 没有真正保存到文件中

Editor remove(name)

commit(): 提交, 数据真正保存到文件中了

手机内部文件存储

说明

应用运行需要的一些较大的数据或图片可以用文件保存的手机内部

文件类型: 任意

数据保存的路径: /data/data/projectPackage/files/

可以设置数据只能是当前应用读取, 而别的应用不可以

应用卸载时会删除此数据

相关API
读取文件

FileInputStream fis = openFileInput(“logo.png”);

保存文件

FileOutputStream fos = openFileOutput(“logo.png”, MODE_PRIVATE)

得到files文件夹对象

File filesDir = getFilesDir();

操作asserts下的文件

得到AssetManager : context.getAssets();

读取文件: InputStream open(filename);
加载图片文件

Bitmap BitmapFactory.decodeFile(String pathName) // .bmp/.png/.jpg

比如保存并读取assets下的代码
public void save(View view) throws IOException {
    //1. 得到InputStream-->读取assets下的logo.png
    //得到AssetManager
    AssetManager manager = getAssets();
    //读取文件
    InputStream is = manager.open("logo.png");
    //2. 得到OutputStream-->/data/data/packageName/files/logo.png
    FileOutputStream fos = openFileOutput("logo.png", MODE_PRIVATE);
    //3.边读边写
    byte[] buffer = new byte[1024];
    int len = -1;
    while ((len = is.read(buffer)) != -1) {
        fos.write(buffer);
    }
    //4.关闭
    is.close();
    fos.close();
    //5.提示
    Toast.makeText(this, "保存成功", Toast.LENGTH_LONG).show();
}

public void read(View view) {
    //1. 得到图片文件的路径
    // /data/data/packageName/files
    String filePath = getFilesDir().getAbsolutePath();
    String path = filePath + "/logo.png";
    //2. 读取加载图片文件得到bitmap对象
    Bitmap bitmap = BitmapFactory.decodeFile(path);
    //3.设置图片
    iv_if.setImageBitmap(bitmap);
}

手机外部文件存储

说明
应用运行用到的数据文件(如图片)可以保存到sd卡中
文件类型: 任意
数据保存的路径:

路径1: /storage/sdcard/Android/data/packageName/files/

路径2: /storage/sdcard/xxx/

路径1 :其它应用可以访问,应用卸载时删除
路径2 : 其它应用可以访问, 应用卸载时不会删除
必须保证sd卡挂载在手机上才能读写, 否则不能操作
相关API
Environment : 操作SD卡的工具类

得到SD卡的状态:Environment.getExternalStorageState()

得到SD卡的路径:Environment.getExternalStorageDirectory()

SD卡可读写的挂载状态值:Environment.MEDIA_MOUNTED

context. getExternalFilesDir():

得到/mnt/sdcard/Android/data/pageckage_name/files/xxx.txt

操作SD卡的权限:

android.permission.WRITE_EXTERNAL_STORAGE

实现文件保存——路径1:其它应用可以访问,应用卸载时删除
 public void save(View view) throws Exception {
    //1. 判断sd卡状态, 如果是挂载的状态才继续, 否则提示
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        //2. 读取输入的文件名/内容
        String fileName = et_of_name.getText().toString();
        String content = et_of_content.getText().toString();
        //3. 得到指定文件的OutputStream
        //1).得到sd卡下的files路径
        String filePath = getExternalFilesDir(null).getAbsolutePath();
        //2).组成完整路径
        String path = filePath + "/" + fileName + ".txt";
        //3). 创建FileOutputStream
        FileOutputStream fos = new FileOutputStream(path);
        //4. 写数据
        fos.write(content.getBytes("utf-8"));
        fos.close();
        //5.提示
        Toast.makeText(this, "保存成功", Toast.LENGTH_LONG).show();

    } else {
        Toast.makeText(this, "sd卡没有挂载", Toast.LENGTH_LONG).show();
    }
}

public void read(View view) throws Exception {
    //1. 判断sd卡状态, 如果是挂载的状态才继续, 否则提示
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        //2. 读取输入的文件名/内容
        String fileName = et_of_name.getText().toString();
        //3. 得到指定文件的InputStream
        //1).得到sd卡下的files路径
        String filePath = getExternalFilesDir(null).getAbsolutePath();
        //2).组成完整路径
        String path = filePath + "/" + fileName + ".txt";// 1.txt
        //3). 创建FileInputStream
        FileInputStream fis = new FileInputStream(path);
        //4. 读数据 OutputStream提供了write方法来做数据的输出,这个是和InputStream是相对应的。
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = -1;
        while ((len = fis.read(buffer)) != -1) {
            baos.write(buffer, 0, len);
        }
        String content = baos.toString();
        //5.提示
        et_of_content.setText(content);

    } else {
        Toast.makeText(this, "sd卡没有挂载", Toast.LENGTH_LONG).show();
    }
}
文件保存——路径2:其他应用可以访问,应用卸载后不删除
 //  /storage/sdcard/dongge/xxx.txt
public void save2(View v) throws IOException {
    //1. 判断sd卡状态, 如果是挂载的状态才继续, 否则提示
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        //2. 读取输入的文件名/内容
        String fileName = et_of_name.getText().toString();
        String content = et_of_content.getText().toString();
        //3. 得到指定文件的OutputStream
        //1).得到sd卡下的files路径:/storage/sdcard/xxx/
        String filePath = Environment.getExternalStorageDirectory().getPath();
        String sdPath = filePath + "/dongge";
        File file = new File(sdPath);
        if (!file.exists()) {
            //创建文件夹
            file.mkdirs();
        }
        //2).组成完整路径
        String path = filePath + "/dongge/" + fileName + ".txt";
        //3). 创建FileOutputStream
        FileOutputStream fos = new FileOutputStream(path);
        //4. 写数据
        fos.write(content.getBytes("utf-8"));
        fos.close();
        //5.提示
        Toast.makeText(this, "保存成功", Toast.LENGTH_LONG).show();

    } else {
        Toast.makeText(this, "sd卡没有挂载", Toast.LENGTH_LONG).show();
    }
}

public void read2(View view) throws Exception {
    //1. 判断sd卡状态, 如果是挂载的状态才继续, 否则提示
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        //2. 读取输入的文件名/内容
        String fileName = et_of_name.getText().toString();
        //3. 得到指定文件的InputStream
        //1).得到sd卡下的files路径
        String filePath = Environment.getExternalStorageDirectory().getAbsolutePath();


        //2).组成完整路径
        String path = filePath + "/dongge/" + fileName + ".txt";
        //3). 创建FileInputStream
        FileInputStream fis = new FileInputStream(path);
        //4. 读数据 OutputStream提供了write方法来做数据的输出,这个是和InputStream是相对应的。
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = -1;
        while ((len = fis.read(buffer)) != -1) {
            baos.write(buffer, 0, len);
        }
        String content = baos.toString();
        //关闭
        baos.close();
        fis.close();
        //5.提示
        et_of_content.setText(content);

    } else {
        Toast.makeText(this, "sd卡没有挂载", Toast.LENGTH_LONG).show();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值