写博客是为了做开发笔记,只为记录我的点滴,可能我的笔记会有错误的认识,如果误导大家的话见谅见谅,当然欢迎大神出来纠正。
(请确保你的应用是否具有内存卡的读写权限,设置了targetSdkVersion 23或者以上默认禁止的,需动态申请)
绝大部分人创建不出来情况如下:
1.是否具有存储权限,android6.0以上是否动态申请权限?
2.存储的路径是否有问题?
3.存储空间是否爆满?
解决方案:
1.没有权限问题是我们开发时经常忘记的事情,对于Android 5.0及以前的手机,我们只需要在manifest中添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
但在你会发现不管用,对于Android6.0之后的系统就需要动态申请权限了,在创建文件之前添加
ActivityCompat.requestPermissions(this, new String[]{android
.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 10001);
然后重写权限回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length == 0 || PackageManager.PERMISSION_GRANTED != grantResults[0]) {
Toast.makeText(this,"你拒绝了权限,无法创建!",Toast.LENGTH_LONG).show();
});
} else {
//在这执行你创建文件的代码
}
}
这样你的app就具备存储权限了。
2.由于部分手机没有外部存储,所以我们涉及外部存储需先作判断
/**
* 获取存储的路径
*
* @return 返回存储路径
*/
public static String getSDPath() {
// 判断是否挂载
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
return Environment.getExternalStorageDirectory().getAbsolutePath();
}
return Environment.getRootDirectory().getAbsolutePath();
}
最近开发中有这么一个需求:用户在拍照上传图片时,要将图片的缩略图和处理后的原图分别保存在本地规定的目录,因为很少接触本地储存所以也是误打误撞。
File dir = new File(SD_PATH);
dir.mkdirs()
其中单执行new file并不会创建文件或文件夹,要通过调研mkdirs()函数,这样创建的目录不会删除以前的数据。其中要注意的是 mkdir()和mkdirs()的区别,前者不会创建父目录,若没有父目录的话会创建失败,所以推荐使用后者来创建。
File dir1 = new File(dir,"image.jpg");
看英文文档以为会创建一个jpg的文件,然后实际操作中发现时不创建的,可以通过createNewFile()函数这样创建一个空的文件,也可以通过文件流的使用创建
File file = new File(imagePath, imageName);(当前file对象在手机内部存储不存在)
if (file.exists())
file.delete();
FileOutputStream out = new FileOutputStream(file);
tBitmap.compress(Bitmap.CompressFormat.JPEG, 80, out);
最后在记录下 缩略图的生成方法 很简单
Bitmap tBitmap = ThumbnailUtils.extractThumbnail(bitmap, 120, 120);
其中bitmap是原图,120,120 是缩略图的宽高。