文章目录
前言
最近,需要使用android手机手机些数据,准备将数据存储的android手机的内存卡内,遇到一大堆的问题。
permisison denied 。。。。。,实在恶心,最后还是把坑填了,这里记录下android studio下进行文件写入的过程。
添加权限
1.在AndroidManifest.xml添加下面两个权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" />
2.在 AndroidManifest.xml 的application标签里,添加属性:
android:requestLegacyExternalStorage="true"
3.动态声明权限,定义好函数后,直接放到oncreate函数里执行就行
private void checkNeedPermissions(){
//6.0以上需要动态申请权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//多个权限一起申请
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
}, 1);
}
}
build.gradle
修改 targetSdkVersion 为23
文件写入
例子代码
try {
//获取环境路径
String strFilePath = String.valueOf(Environment.getExternalStorageDirectory());
//判断路径是否存在,不存在创建,这儿也是个坑,若没有这段代码,很可能会写入失败
/************/
File cacheFile = new File(strFilePath);
// 上级文件不存在,进行文件夹的创建
if (!cacheFile.exists()) { // 先根据路径创建文件夹
cacheFile.mkdirs();
}
String filename = "base.txt";
boolean createResult = false;
File file = new File(strFilePath, filename);//在创建文件
try {
if (file.exists()) {
file.delete();
}
createResult = file.createNewFile();
}
catch (Exception e) {
e.printStackTrace();
}
Log.i("msg",strFilePath);
if (!createResult) {
Log.e("TAG", "文件创建失败");
} else {
Log.e("TAG", "文件创建成功");
}
/************/
/************/
//设置写模式
file.canWrite();
String data="hello world";
OutputStream ff = new FileOutputStream(file);
byte []szBuf = data.getBytes();
ff.write(szBuf);
ff.close();
/************/
} catch (Exception e) {
e.printStackTrace();
}
结语
我这里会在手机路径
storage/emulated/0 创建一个base.txt,并写入 hello world