我不是想在/ mnt / sdcard写入外部sd。我正在尝试为may app文件创建一个文件夹,让其他人可以访问它们。
我有一个名为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();
}
注意:我已获得在外部存储中写入的清单权限。
答案 0 :(得分:3)
根是ramdisk。其中的文件夹部分由init.rc创建。只有init.rc才有权在ramdisk中创建文件夹。 如果你通过init.rc创建文件夹,你仍然需要init.rc帮助在新文件夹上安装一个真正的stroage设备。
答案 1 :(得分:1)
首先,您需要root权限才能写入权限。 您可以使用rootexplorer应用程序查看是否已创建文件夹。 获得root访问权限后尝试此操作。
答案 2 :(得分:0)
我认为这不是在Android操作系统中创建文件的正确方法。 来自http://developer.android.com/training/basics/data-storage/files.html:
如果你想在外部存储上保存公共文件[我已经阅读了你的建议,但我认为你可以通过这种方式访问多个应用程序中的文件,如果这是你想要的],请使用getExternalStoragePublicDirectory()方法获取表示外部存储上相应目录的File。该方法接受一个参数,指定要保存的文件类型,以便可以使用其他公共文件(如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;
}
答案 3 :(得分:0)
首先获得你的app.Run 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();