外部存储九大公共目录

外部存储有九种类型,分别对应不同的目录,如下

DIRECTORY_MUSIC:音乐类型 /storage/emulate/0/music
DIRECTORY_PICTURES:图片类型
DIRECTORY_MOVIES:电影类型
DIRECTORY_DCIM:照片类型,相机拍摄的照片视频都在这个目录(digital camera in memory)
DIRECTORY_DOWNLOADS:下载文件类型 /storage/emulate/0/downloads
DIRECTORY_DOCUMENTS:文档类型
DIRECTORY_RINGTONES:铃声类型
DIRECTORY_ALARMS:闹钟提示音类型
DIRECTORY_NOTIFICATIONS:通知提示音类型

6.0以上安卓版本需要授予存储访问权限

int permission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
    //动态申请权限
    ActivityCompat.requestPermissions(this, new String[]{Manifest.
        permission.WRITE_EXTERNAL_STORAGE}, 1);//参数3:请求码
}

外部公有目录存储长期数据

String path = Environment.getExternalStorageDirectory().getAbsolutePath()

外部私有目录存储长期数据

String path = this.getExternalFilesDir(DIRECTORY_DOCUMENTS).getPath+"/inputText.txt";

外部私有目录存储临时数据

String path = this.getExternalCacheDir().getPath()+"/inputText.txt";

外部私有目录读取

FileInputStream fis = new FileInputStream(path);
//不知数据大小,先将数据存放到数组
byte[] b = new byte[1024];
//桥流读取
ByteArrayOutputStream baso = new ByteArrayOutputStream();
//存放读到的内容的长度
int len = 0;
while ((len = fis.read(b)) > -1) {
    //每次存放读到内容的长度
    baso.write(b, 0, len);
}
//转型
String str = new String(baso.toByteArray());
//输出
content.setText(str);

Q.E.D.