Android new File初识-创建不出文件问题

写博客是为了做开发笔记,只为记录我的点滴,可能我的笔记会有错误的认识,如果误导大家的话见谅见谅,当然欢迎大神出来纠正。

(请确保你的应用是否具有内存卡的读写权限,设置了targetSdkVersion 23或者以上默认禁止的,需动态申请)

绝大部分人创建不出来情况如下:
1.是否具有存储权限,android6.0以上是否动态申请权限?
2.存储的路径是否有问题?
3.存储空间是否爆满?

解决方案:
1.没有权限问题是我们开发时经常忘记的事情,对于Android 5.0及以前的手机,我们只需要在manifest中添加

但在你会发现不管用,对于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 是缩略图的宽高。

你可能感兴趣的:(android开发点滴)