Android数据持久化保存--File

//系统清理缓存的时候,内部存储私有目录cache下的文件和外部存储私有目录cache下的文件都被清除
//系统清除数据的时候,内部存储私有目录和外部存储私有目录下的文件都被清除
//openFileOutputgetFilesDir()目录下打开或者创建文件,文件不存在的时候则创建文件
//getFilesDir()目录可以存放持久文件,只要应用不卸载,但是这个目录我们看不见,因为它属于内部存储目录
//通过文件管理器看到的都是外部存储目录
//写入
private void getFileDirTest(){
    // /data/user/0/com.example.administrator.copypaste/files
    Log.i("wanlijun",getFilesDir().getAbsolutePath());
    try {
        FileOutputStream fos = openFileOutput("buling",MODE_APPEND);
        FileInputStream fis = new FileInputStream(Environment.getExternalStorageDirectory() +"/1.txt");
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fis.read(buffer)) != -1){
            fos.write(buffer,0,len);
        }
        fos.flush();
        fos.close();
        fis.close();
    }catch (Exception e){
        e.printStackTrace();
    }
}
//读取
private void getFileDirTest2(){
    Log.i("wanlijun",getFilesDir().getAbsolutePath());
    try {
        FileInputStream fis = openFileInput("buling");
        FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() +"/moezu.txt");
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fis.read(buffer)) != -1){
            fos.write(buffer,0,len);
        }
        fos.flush();
        fos.close();
        fis.close();
    }catch (Exception e){
        e.printStackTrace();
    }
}

private void getExternalStorage(){
    //获取外部存储的公有目录->/storage/emulated/0/DCIM
    Log.i("wanlijun",Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath());
    //获取外部存储的私有目录,清除数据就是删除该应用的私有目录(内部存储设备->Android->data目录下的)
    //获取文件根目录,应用不卸载,可长期存放文件
    File[] files = MainActivity.this.getExternalFilesDirs(Environment.DIRECTORY_DCIM);
    for(File file:files){
        ///storage/emulated/0/Android/data/com.example.administrator.copypaste/files/DCIM
        Log.i("wanlijun",file.getAbsolutePath());
    }
    //获取文件内的具体目录->/storage/emulated/0/Android/data/com.example.administrator.copypaste/files/DCIM
    //就是文件管理器里的内部存储设备->Android->data目录下面的
    Log.i("wanlijun",MainActivity.this.getExternalFilesDir(Environment.DIRECTORY_DCIM).getAbsolutePath());
    //获取缓存目录,清除缓存就是删除该目录和内容
    ///storage/emulated/0/Android/data/com.example.administrator.copypaste/cache
    Log.i("wanlijun",MainActivity.this.getExternalCacheDir().getAbsolutePath());
    File[] files1 = MainActivity.this.getExternalCacheDirs();
    for(File file:files1){
        Log.i("wanlijun",file.getAbsolutePath());
    }
    //获取应用存放媒体的目录,目录内的内容可以被其他应用访问,通过MediaStore查询和获取
    ///storage/emulated/0/Android/media/com.example.administrator.copypaste(内部存储设备->Android->media->该应用的包名)
    File[] files2 = MainActivity.this.getExternalMediaDirs();
    for (File file:files2){
        Log.i("wanlijun",file.getAbsolutePath());
    }
}

//检查存储介质的可用性
private boolean isExternalStorageWritable(){
    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        return true;
    }else{
        return false;
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(requestCode == 101){
        if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
            getFileDirTest();
        }else{
            Toast.makeText(MainActivity.this,"请先开启存储权限",Toast.LENGTH_LONG).show();
        }
    }
}
 if(ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
                   ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},101);
               }else{
//                   getFileDirTest();
                   getFileDirTest2();
                   getExternalStorage();
               }

猜你喜欢

转载自blog.csdn.net/u010015933/article/details/80582765
今日推荐