android studio java文件写入的坑

前言

最近,需要使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值