【问题标题】:Create a folder and write into it in the root of android在android的根目录下创建一个文件夹并写入
【发布时间】:2013-03-13 07:40:44
【问题描述】:

我没有尝试在 /mnt/sdcard 上写入外部 sd。我正在尝试为可能的应用程序文件创建一个文件夹,并让其他人可以访问它们。

我有一个名为 Libra 的应用程序,它在导出数据时生成 .csv 文件,并且所有这些文件都进入 /Libra/ 文件夹。我希望我的应用也能做到这一点。

据我所知,外部存储是 sd,内部存储是应用程序的非公共场所。

如何像 Libra 一样在 android 文件系统的根目录下创建一个目录?

如果我要求外部存储,我会得到以下不需要的位置:

Environment.getExternalStorageDirectory()
/storage/emulated/0/ (in my Nexus)
/mnt/sdcard          (in the emulator)

如果我尝试在绝对路径 /MyDiary 中创建文件夹,则会返回创建文件夹时出错

File folder = new File("/MyDiary");
boolean success = true;
if (!folder.exists()) {
        success = folder.mkdir();
}
if (success) {
        Toast.makeText(getBaseContext(), "Already exists", Toast.LENGTH_LONG).show();
} else {
        Toast.makeText(getBaseContext(), "Error creating directory", Toast.LENGTH_LONG).show();
        return;
}

如果我尝试检查 Libra 文件夹是否存在,它会说它不存在:

File folder = new File("/Libra");
boolean success = true;
if (!folder.exists()) {
        success = folder.mkdir();
}
if (success) {
        Toast.makeText(getBaseContext(), "Libra exists", Toast.LENGTH_LONG).show();
}

注意:我已经获得了在外部存储中写入的清单权限。

【问题讨论】:

  • 你在哪里可以看到这个 /Libra 文件夹,你怎么知道数据到那里

标签: android mkdir


【解决方案1】:

根是 ramdisk。其中一些文件夹是由init.rc创建的。只有 init.rc 有权在 ramdisk 中创建文件夹。 如果您通过init.rc创建文件夹,您仍然需要init.rc帮助才能在新文件夹上挂载真正的stroage设备。

The init.rc file regenerated on restart一样重新打包

【讨论】:

    【解决方案2】:

    首先你需要root访问权限才能写。 您可以使用 rootexplorer 应用程序查看它是否在那里创建了文件夹。 获得root权限后试试这个。

    【讨论】:

      【解决方案3】:

      我认为这不是在 Android 操作系统中创建文件的正确方法。 来自http://developer.android.com/training/basics/data-storage/files.html

      如果您想将公共文件保存在外部存储上 [我已经阅读了您的建议,但我认为这样您可以从多个应用程序访问文件,如果这是您想要的],请使用getExternalStoragePublicDirectory() 方法获取表示外部存储上适当目录的文件。该方法接受一个参数,指定要保存的文件类型,以便它们可以与其他公共文件进行逻辑组织,例如 DIRECTORY_MUSIC 或 DIRECTORY_PICTURES。例如:

      public File getAlbumStorageDir(String albumName) {
          // Get the directory for the user's public pictures directory. 
          File file = new File(Environment.getExternalStoragePublicDirectory(
              Environment.DIRECTORY_PICTURES), albumName);
          if (!file.mkdirs()) {
              Log.e(LOG_TAG, "Directory not created");
          }
          return file;
      }
      

      【讨论】:

        【解决方案4】:

        尝试首先获得对您的应用程序的超级用户权限。在您的应用程序第一次运行时,运行 linux 命令以创建要写入数据的文件夹和文件(您只能使用 linux 命令执行此操作)。然后您可以写入数据通过获取 FileOutputStream("filename") object.Leave ur评论它是否有效。 上述程序的部分代码是

            Process p=Runtime.getRuntime().exec("su");
            OutputStream o=p.getOutputStream();
            o.write("mkdir foldername\n".getBytes());
            o.write("cd foldername\n".getBytes());
            o.write("cat > filename\n".getBytes());
            o.write("exit\n".getBytes());
            o.flush();
            p.waitFor();
        

        【讨论】:

          猜你喜欢
          • 2018-11-22
          • 1970-01-01
          • 2017-04-27
          • 1970-01-01
          • 2020-05-22
          • 2020-11-23
          • 1970-01-01
          • 1970-01-01
          • 2021-12-05
          相关资源
          最近更新 更多