zoukankan      html  css  js  c++  java
  • 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.内部存储与外部存储:文件的读写方式大同小异,外部存储需要获取读写权限,判断外部存储空间是否挂载

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    TiFlash:并非另一个 T + 1 列存数据库
    单图说TDSQL;OceanBase 2.2 事务引擎核心功能;穿云箭2.0版发布;RMAN DUPLICATE配置19C DG;外键上有无索引的影响;MySQL8.0 索引新功能;GaussDB C
    tcpdump 看到 报文长度超过MSS
    TCP 最大段大小(Max Segment Size,MSS) 最大段大小
    Hack The Box——Traceback
    如何设置don't fragment (DF) flag 在socket上? (实际模拟路径 MTU 发现)
    MTU=1500 1460数据为什么要发2次?
    MTU=1500,单个报文段最大值为1448
    MTU 1500 发送1448数据
  • 原文地址:https://www.cnblogs.com/conglingkaishi/p/9418103.html
Copyright © 2011-2022 走看看