Android_数据存储

数据存储形式:

1.Shared Preferences : 以key-value形式存储在私有空间

2.Internal Storage:存放私有数据在设备空间   应用自己的空间

3.External Storage:存放公共数据在外部空间  SD卡,外置内存卡

4.Network Connection :数据存放在网络中

数据存储方式对比:

demo:

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

        //读写权限
        private static String[] PERMISSIONS_STORAGE = {
                Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE};
        //请求状态码
        private static int REQUEST_PERMISSION_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        testSharePreferences();

        testInternalStorage();
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE);
            }
        }


    }

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

    /**
     * SharedPreferences存储
     */
    private void testSharePreferences() {
        //获取SharedPreferences对象 参数1:文件名 参数2:文件存储模式
        SharedPreferences text = getSharedPreferences("text",Context.MODE_PRIVATE);
        //获取写对象
        SharedPreferences.Editor edit = text.edit();
       /* edit.putString("heJun","这是super man");
        edit.putString("wangJiaYuan","这是一个傻逼");
        edit.commit(); 执行后立马提交写入
        */

        edit.putString("heJun","这是super man")
                .putString("wangJiaYuan","这是一个傻逼")
                .apply();//执行后由Android选择写入时间,不能马上写入
        //读取数据 参数1:对应的key值 参数2:当没有数据时,默认读取的数据
        String heJun = text.getString("heJun",null);
        String wangJiaYuan = text.getString("wangJiaYuan",null);
        Log.i(TAG, "testSharePreferences: " + heJun +  wangJiaYuan);

    }

    /**
     * 内部存储
     */
    private void testInternalStorage() {
        //获取目录
        File cacheDir = this.getCacheDir();
        File parentDir = new File(cacheDir,"内部存储");
        //判断目录是否存在
        if (!parentDir.exists()){
            parentDir.mkdirs();
        }
        File file = new File(parentDir,"test.txt");
        //写入文件
        try {
            FileWriter fileWriter = new FileWriter(file);
            fileWriter.write("这是一个测试文件");
            fileWriter.flush();
            fileWriter.close();
        } catch (IOException e) {
            //异常打印日志
            Log.e(TAG, "testInternalStorage: ", e);
        }
        //读取文件
        try {
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String line = null;
            while ((line = bufferedReader.readLine())!= null){
                Log.e(TAG, "testInternalStorage: " + line );
            }
            fileReader.close();
            bufferedReader.close();
        } catch (FileNotFoundException e) {
            //异常打印日志
            Log.e(TAG, "testInternalStorage: ", e);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 外部存储
     * 加权限
     *<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
     */
    private void testExternalStorage() {
        //判断外部存储SD卡是否挂载
        if (!TextUtils.equals(Environment.getExternalStorageState(),Environment.MEDIA_MOUNTED)){
            Toast.makeText(this,"SD卡未插入",Toast.LENGTH_SHORT).show();
        }
        //获取目录
        File cacheDir = Environment.getExternalStorageDirectory();
        File parentDir = new File(cacheDir,"内部存储");
        //判断目录是否存在
        if (!parentDir.exists()){
            parentDir.mkdirs();
        }
        File file = new File(parentDir,"test.txt");
     /*   if (!file.exists()){
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }*/
        //写入文件
        try {
            FileWriter fileWriter = new FileWriter(file);
            fileWriter.write("这是一个测试文件");
            fileWriter.flush();
            fileWriter.close();
        } catch (IOException e) {
            //异常打印日志
            Log.e(TAG, "testExternalStorage: ", e);
        }
        //读取文件
        try {
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String line = null;
            while ((line = bufferedReader.readLine())!= null){
                Log.e(TAG, "testExternalStorage: " + line );
            }
            fileReader.close();
            bufferedReader.close();
        } catch (FileNotFoundException e) {
            //异常打印日志
            Log.e(TAG, "testExternalStorage: ", e);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

 

总结:

1.SharePreferences:适合存储小型数据,方便快捷

2.内部存储与外部存储:文件的读写方式大同小异,外部存储需要获取读写权限,判断外部存储空间是否挂载

 

posted @ 2018-08-04 11:37  HJ0101  阅读(132)  评论(0编辑  收藏  举报