2012-07-17 96 views
1

當我嘗試創建一個新文件時,我收到一條錯誤消息。文件不會在android中創建?

代碼:

try 
{ 
    File root = new File(Environment.getExternalStorageDirectory().getAbsolutePath()); 
    Runtime.getRuntime().exec("chmod 777 " + root.getAbsolutePath()); 
    File myFile = new File(root,"createNew.txt"); 
    myFile.createNewFile(); 
} 
catch(Exception e) 
{ 
    Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show(); 
} 

錯誤信息:

java.io.IOException: open failed: EACCES (Permission denied) 

/mnt/sdcard權限爲d---------

如何通過編程方式更改權限如何解決。給我任何想法。

在此先感謝。

注意這一點:

當我使用命令提示符下此代碼,文件創建成功,在這種代碼是:

`chmod 777 /mnt/sdcard` 
+3

你給'Write_External_storage'許可?在您的'Manifest.xml'中授予此權限 – Praveenkumar 2012-07-17 07:51:28

+0

我已經添加了此權限。 – 2012-07-17 07:52:20

+0

您是否在您的設備或模擬器中嘗試此操作? – Praveenkumar 2012-07-17 07:52:46

回答

0

使用此創建文件:

FileOutputStream fos= new FileOutputStream(outputPath); 
//fos.write(...); 
fos.close(); 

作爲Java Doc說:

This method is not generally useful. For creating temporary files, use 
`createTempFile(String, String)` instead. For reading/writing files, use 
FileInputStream, FileOutputStream, or RandomAccessFile, all of which can create 
files. 
+0

我需要訪問只創建一個新的文件。不寫任何東西。只需創建一個文件。怎麼樣? – 2012-07-17 08:27:42

+0

嘗試創建輸出流並關閉它而不寫入,並檢查http://developer.android.com/reference/java/io/FileOutputStream.html#FileOutputStream(java.io.File)和http:// www。 anddev.org/working_with_files-t115.html – Nermeen 2012-07-17 08:33:53

0

我對你的模擬器有疑問文件系統特別是sdcard是只讀。所以,你必須讓它讀寫模式 ..

(如果您正在嘗試在模擬器

一旦你從一個shell啓動的仿真器,登錄到另一個shell &類型

adb shell 

您應該看到#提示符顯示,這是您的設備(模擬器)外殼。現在,在adb shell中輸入以下命令。

mount -o remount rw /sdcard 

這將重新安裝/ sdcard rw(讀寫)權限。

現在檢查使用SD卡的權限..

adb shell ls -l 

欲瞭解更多信息Mount a filesystem read-write

+0

'mount -o rw,remount rootfs /'我加了這個命令。當我可以創建一個新文件後,當我使用這個命令將sdcard'chmod 777/mnt/sdcard'的權限和我的sdcard權限更改爲'drwxrwxrwx'時。但是如何通過編程來實現。 – 2012-07-17 08:06:12

+0

你不能以編程方式進行,你必須讓你的SD卡處於讀/寫模式。您只能從adb shell重新安裝SD卡。由於您的編程外殼不能完成此操作。 – user370305 2012-07-17 08:13:35

+0

如何通過編程安裝...給我任何想法... – 2012-07-17 08:14:12

0

1 - 使用此得到您的SDK目錄:

Environment.getExternalStorageDirectory().getAbsolutePath();  

2 - 或者可能是你的文件路徑有一些非法字符(如空格),在這種情況下,您需要用合法的等號替換它們,例如帶「\」的空格。你可以看到這個網頁:
Runtime.getRuntime().exec()
http://www.coderanch.com/t/498450/java/java/exec-command-not-able-deal
Runtime.exec on argument containing multiple spaces
Combine paths in Java

+0

是的。我已經嘗試訪問此代碼。 – 2012-07-17 08:06:46

+0

@Sathish請加上覆選標記,如果它是真的 – hasanghaforian 2012-07-17 08:09:11

+0

現在看到我的問題。當我嘗試以編程方式設置權限時,當時我無法創建新文件。當我試圖通過命令提示符設置權限時,它正在工作。 – 2012-07-17 08:11:53

0
try { 
    File filename = new File(Environment.getExternalStorageDirectory() + 
          "/yourfilename.txt"); 
    filename.createNewFile(); 
    FileWriter writer = new FileWriter(filename2); 
    writer.write("Your content"); 
    writer.flush(); 
    writer.close(); 
} catch (IOException e) { 
    ... 
} 
+0

我得到了同樣的錯誤。 – 2012-07-17 08:26:39

+0

請不要宣傳'e.printStackTrace()'。這是一個壞習慣。那些默認情況下真正討厭你的IDE。 – kay 2012-07-17 21:15:19