android - 无法在 Android/data 中创建文件夹

标签 android android-external-storage

我在 Android/data 文件夹中创建文件夹时遇到问题。 我的代码需要创建文件夹,并从其中的 Assets 文件夹复制一个文件。 这是我的代码:

private File getFileForShare(String filename) {
    try {
        String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
        File folder = new File(extStorageDirectory, "/Android/data/" + context.getPackageName());
        if (!folder.exists()) {
            folder.mkdir();
        }
        AssetManager am = context.getAssets();
        InputStream inputStream = am.open("audio/" + filename);

        File f = new File(folder.getAbsolutePath(), filename);
        OutputStream outputStream = new FileOutputStream(f);
        byte buffer[] = new byte[1024];
        int length = 0;

        while ((length = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, length);
        }

        outputStream.close();
        inputStream.close();

        return f;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

我在初始化 OutputStream 对象时获得了 FileNotFoundException。 此外,如果我转到 Android/data 文件夹,则不会创建包含我的应用程序包名称的新文件夹。 在 list 中我设置了读写存储权限。怎么了?

最佳答案

What's wrong?

对于主要设备所有者来说,获取位于外部存储上 Android/data/ 下的目录的正确方法是调用 getExternalFilesDir()可用的 Context。替换:

    String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
    File folder = new File(extStorageDirectory, "/Android/data/" + context.getPackageName());

与:

    File folder = context.getExternalFilesDir();

关于android - 无法在 Android/data 中创建文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28129647/

相关文章:

android - 如何处理 Activity 和 Fragment 之外的权限请求?

java - 编辑外部存储中的文件

Android:从SD卡中文件的Uri获取文件路径

Android Studio 2.3.2 总是要求 gradle 更新

java - LibGDX 弹跳球

用于打开相机和扫描二维码的Android API?

android - 从 SD 卡或 android 中的任何应用程序选择 docx、doc、rtf、pdf 类型的文件

android - 如何使用 ScnViewGestures.Forms 在 Xamarin.Forms 中创建包含 TouchDown 和 TouchUp 事件的 View

android - 显示按钮位于屏幕最底部和右侧

android - 将下载的图像保存在 Android 的图库中