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