2013-03-23 91 views
3

我不想写入外部sd在/ mnt/sdcard。我正在尝试为may应用程序文件创建一个文件夹,并让其他人可以访问它们。创建一个文件夹,并写入它的根目录Android

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

据我所见,有外部存储是sd和内部,这是一个非公开的应用程序的地方。

我该如何在Android系统文件系统的根目录下创建一个dir目录?

如果我要在外部存储I得到以下的非期望的位置:

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

哪里让你看到这个/天秤座的文件夹,准确,你怎么知道的数据去那里 – 2013-03-23 13:51:22

回答

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; 
} 
1

首先你需要root访问权限来写。 您可以使用rootexplorer应用程序查看它是否已创建文件夹。 获取root访问权限后尝试执行此操作。

0

尝试首先获得超级用户权限到您的应用程序。运行linux命令,使您的应用程序在第一次运行时就可以写入您想要写入数据的文件夹和文件(只能通过linux命令执行此操作)。然后,您可以编写数据到FileOutputStream(“文件名”)对象的文件。离开你的评论,如果它的工作与否。对于上述过程 部分码是

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(); 
3

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

重新包装像The init.rc file regenerated on restart

相关问题