【问题标题】:Android create folder in internal root directoryAndroid在内部根目录中创建文件夹
【发布时间】:2020-05-22 05:22:38
【问题描述】:

我需要在内存根目录中创建一个文件夹并在其中创建一个文件,但找不到下面的代码工作。

        String path = Environment.getRootDirectory().toString();

        File mFolder = new File(path,"Folder");
        if (!mFolder.exists()) {
            boolean res = mFolder.mkdir();
        }

而且 mkdir 总是返回 false。我已经找到 getDataDirectory() 和 getFilesDir() 但我不需要。我需要创建一个目录来存放内存根位置(我们打开内存时首先看到的位置)

编辑:

根文件夹我的意思是我们在使用文件浏览器打开的内部存储器上看到的第一个位置。在哪里可以看到Download、Pictures、Android 等。

【问题讨论】:

  • 不清楚你认为什么是根目录..当你“打开内存”时你在做什么还不清楚。目前还不清楚您首先看到的是哪个位置。不清楚。
  • 请看我的编辑。
  • @CodeDezk 你试试我的答案吗?它给你想要的一样
  • 你说的是哪个文件浏览器?你是怎么开始的?你首先看到的是哪个位置?什么是根目录?不清楚。
  • @HardikTalaviya 我会在 1 小时内尝试并报告你。谢谢。

标签: java android


【解决方案1】:

我认为您无法在设备的内部存储中创建目录。除非您对该应用程序具有 root 访问权限。 您只能在以下路径String path = getFilesDir().中的应用程序私有文件夹内创建目录@

你可以像下面这样使用 -

File mydir = context.getDir("mydirectory", Context.MODE_PRIVATE); //Creating an internal dir;
File fileWithinMyDir = new File(mydir, "myAwesomeFile"); //Getting a file within the dir.
FileOutputStream out = new FileOutputStream(fileWithinMyDir); //Use the stream as usual to write into the file.

getDir(StringName, int mode) 方法在内部存储中创建或访问目录。

有关更多信息,您可以阅读 - create directory

【讨论】:

  • 它会创建目录,但不会在内存的根目录中。
  • root是什么意思?
  • 打开内存首先看到的位置,可能是root这个词不正确。
  • @CodeDezk 哦,我明白了,我想你不能,除非你有设备的 root 访问权限。我已经更新了我的答案。谢谢
【解决方案2】:

你应该使用getExternalStorageDirectory()并且你应该请求它的写权限。

但请注意,getExternalStorageDirectory() 在 android 29 上已弃用,这意味着如果您根据文件内容定位更新的 android 版本,则应使用 getExternalFilesDir()、getExternalCacheDir() 或 getExternalMediaDir()。

并且您应该请求对清单的写入权限(对于旧的 android 版本,Build.VERSION.SDK_INT = 23)

检查用户是否已授予外部存储权限:

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
    Log.v(TAG,"Permission granted");
    //File write logic here
    return true;
}

如果未授予权限,您应该要求:

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);

并实现OnRequestPermissionResult 以获取结果回调。

所有这些信息和更多代码都可以在这里找到https://developer.android.com/training/permissions/requesting

【讨论】:

  • Environment.getExternalStorageDirectory() 是否在内部存储器中创建文件夹。
  • getFilesDir() 没有在根目录中创建文件夹,请看我的问题。
  • 但除非越狱,否则您只能在应用的文件夹中创建文件
  • 是的,我需要使用文件浏览器查看文件,比如whatsup在内存中创建目录,我们可以浏览它。
  • You should use context.getFilesDir() and you should ask for write permissions to it.。不,getFilesDir() 不需要权限。
【解决方案3】:

mkdir()只创建需要的目录,如果某些父目录不存在,将返回false。尝试检查目录是否存在(或为什么不存在)或使用mkdirs(),这会另外创建缺少的目录

【讨论】:

    【解决方案4】:

    试试下面的代码

    File file = new File(Environment.getExternalStorageDirectory() + "/Folder");
    if (!file.exists()) {
        boolean res = file.mkdirs();
    }
    

    但 Environment.getExternalStorageDirectory() 它已被 Android Q 弃用。

    希望对你有帮助!

    谢谢。

    【讨论】:

    • 是否在内存中创建文件夹。
    • @CodeDezk 是的,试试吧
    • 但是根据stackoverflow.com/questions/5453708/…这里的答案,它会给出SD卡的位置。
    • @CodeDezk 对不起,但首先检查答案,然后得出任何结论或投反对票。谢谢^_^。
    • 我将 ExternalStorageDirectory 一词误解为 SD 卡。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多