安卓的文件操作

数据的存储方式

文件存储:使用 openFileInput()和 openFileOutput() 方法来读取文件

SharedPreferences:将数据以xml 格式存储到设备中,通常用来存储程序的配置信息

SQLite数据库:SQLite是 Android自带的一个轻量级数据库

ContentProvider:Android四大组件之一,主要作用于应用程序之间的数据交换

网络存储:通过网络提供的存储空间来存储/获取数据

文件存储: 有两种存储方式:一种是内部存储,一种是外部存储,内部存储时将数据以文件的形势存储到应用中 位置时 data/data/ < packagename>/目录下,然后这个文件会被应用程序私有化,如果别的应用要操作的话会需要权限,当卸载程序的时候,内部文件就会被删除, 内部存储使用的时 Context 提供的openFileOutput() 和 openFileInput() ,这两个方法返回 FileOutputStream对象和 FileInputStream 对象

 FileOutputStream fos = openFileOutput(String name,int mode); //写入文件
 FileInputStream fis = openFileInput(String name);//

mode总共有四种模式
MODE_PRIVATE 只能被当前程序读写
MODE_APPEN 内容可以追加
MODE_WORLD_READABLE 可以被其他程序读
MODE_WORLD_WRITEABLE 可以被其他程序写

写一个文件的工具类

public static boolean write(Context context, String account, String passwd){
        //写入文件
        try {
            FileOutputStream fos = context.openFileOutput(FILE_NAME,Context.MODE_PRIVATE);
            fos.write((account+","+passwd).getBytes());
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
//读取文件
public static Map<String,String> getAccount(Context context){
        Map<String,String> content = new HashMap<>();
        try {
            FileInputStream fis = context.openFileInput(FILE_NAME);
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            String[] infos = new String(buffer).split(",");
            if(infos.length > 0){
                content.put("account",infos[0]);
                content.put("passwd",infos[1]);
            }
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return content;
    }

删除内部文件

public static void clear(Context context){
        File file = new File(context.getFilesDir(),FILE_NAME);
        if(file.exists()){
            file.delete();
        }
    }

外部存储:
将文件存储在外部设备,如SD卡或者 内置存储卡中,通常位于
/mnt/sdcard目录下 外部文件可以被其他程序所共享
添加权限
在这里插入图片描述
然后在类里面实现ActivityCompat.OnRequestPermissionsResultCallback的接口

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if(grantResults.length == 0 || grantResults[0] != PackageManager.PERMISSION_GRANTED){
            Toast.makeText(this,"权限申请被拒绝",Toast.LENGTH_SHORT).show();
            return;
        }
        switch (requestCode){
            case 1:
                boolean isSuccess = FileUtil.savePublic(this,
                        userName.getText().toString().trim(),
                        passwd.getText().toString().trim());
                if(isSuccess){
                    Toast.makeText(this,"保存成功",Toast.LENGTH_SHORT).show();
                }
                else{
                    Toast.makeText(this,"保存失败",Toast.LENGTH_SHORT).show();
                }
                break;
            case 2:
                Map<String,String> data = FileUtil.getAccount(this);
                if(data.size() > 0){
                    userName.setText(data.get("account"));
                    passwd.setText(data.get("passwd"));
                }
                break;
        }
    }
public static Boolean savePublic(Context context,String account,String passwd){
        //检查SD卡的权限
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            if(context.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions((Activity) context,
                        new String []{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
                return false;
            }
        }
        // 权限被允许处理

        String state = Environment.getExternalStorageState();
        if(state.equals(Environment.MEDIA_MOUNTED)){
            File SDPath = Environment.getExternalStorageDirectory();
            File file = new File(SDPath,FILE_NAME);

            try {
                FileOutputStream fos = new FileOutputStream(file);
                fos.write((account+","+passwd).getBytes());
                fos.close();
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }
        return false;
    }

读取外部文件中的数据

public static Map<String,String> getPublic(Context context){
        Map<String,String> content = new HashMap<>();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            if(context.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions((Activity) context,
                        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},2);
                return content;
            }
        }
        String state = Environment.getExternalStorageState();

        if(state.equals(Environment.MEDIA_MOUNTED)){
            File SDPath = Environment.getExternalStorageDirectory(); //获取SD卡路径
            File file = new File(SDPath,FILE_NAME); //创建文件对象

            try{
                FileInputStream fis = new FileInputStream(file);  //创建文件输入流对象
                BufferedReader br = new BufferedReader(new InputStreamReader(fis));//创建输入缓冲流的对象

                String data = br.readLine();//读取数据

                String[] infos = data.split(",");
                if(infos.length > 0){
                    content.put("account",infos[0]);
                    content.put("password",infos[1]);
                }
                br.close();//关闭字符输入缓冲流
                fis.close();//关闭输入流
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        return content;
    }

关闭外部文件

public static void clearPublic(){
        File SDPath = Environment.getExternalStorageDirectory();
        File file = new File(SDPath,FILE_NAME);
        if(file.exists()){
            file.delete();
        }
    }

使用SharedPreferences 以xml形势存进去
先在里面添加 权限

public static boolean saveAccount(Context context, String account, String passwd){
        context.getSharedPreferences("data",Context.MODE_PRIVATE).edit().putString("account",account)
                .putString("passwd",passwd).apply();
        return true;
    }

    public static Map<String,String> getAll(Context context){
        return (Map<String, String>) context.getSharedPreferences("data",Context.MODE_PRIVATE).getAll();
    }

    public static void clear(Context context){
        context.getSharedPreferences("data", Context.MODE_PRIVATE).edit().clear().apply();
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值