//系统清理缓存的时候,内部存储私有目录cache下的文件和外部存储私有目录cache下的文件都被清除 //系统清除数据的时候,内部存储私有目录和外部存储私有目录下的文件都被清除 //openFileOutput在getFilesDir()目录下打开或者创建文件,文件不存在的时候则创建文件 //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(); }