4

我不想在 /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();
}

注意:我有在外部存储中写入的清单权限。

4

4 回答 4

3

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

Repack like重启时重新生成的 init.rc 文件

于 2014-04-11T03:17:16.330 回答
1

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

于 2013-03-23T14:13:59.887 回答
0

我认为这不是在 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;
}
于 2013-03-23T13:53:35.940 回答
0

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

    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();
于 2013-03-23T17:45:32.573 回答