2013-03-23 482 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

相關問題