2014-03-05 112 views
3

此問題與this question無關。我已經看到它,但它是特定的Android 4.4.2問題,因爲該代碼可以在其他版本的Android上正常工作。Android 4.4.2 File.mkdir()和mkdirs()正在創建文件而不是目錄

final File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MY_Downloads"); 

     if (!path.exists()) { 
      path.mkdir(); // also tried it with path.mkdirs(); 
      context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(path))); 
     } 

我使用此代碼它創建一個FILE,而不是在Android 4.4.2的文件夾。請幫我已經讀這article

我已經給下面的權限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

我知道如何訪問SD卡以及最新的變化有關的公共目錄,但我想創建一個文件夾而不是文件

回答

1

Android設備的最初幾代總是用於存儲SD卡和訪問,這是簡單地使用由SDK方法

Environment.getExternalStorageDirectory()提供的路徑的問題。

很快,新設備開始出現,內部存儲分區被映射爲外部存儲,因此可以調用環境等方法。

getExternalStoragePublicDirectory(String)

現在指向這個內部存儲而不是物理SD卡。

一些最新的設備,如三星Galaxy Nexus甚至沒有SD卡插槽。

refer this blog

我希望這幫助。

+0

親愛的謝謝,我只是想不創建一個文件夾中的文件。我已經讀過這個,並且相同的代碼與Android 4.3一起工作(內部sd卡與您正在談論的相同) –

+0

在KitKat上,兩種方法都返回內存上的/ storage/emulated/0路徑。如果我強制在/ storage/external_SD/Android/data/<軟件包名稱>/files/Pictures中創建一個目錄,則文件是Windows上的一個文件,但是使用ES3或Wifi文件傳輸它是一個目錄。 – Zekitez

+0

我試着用「/ storage/external_SD/Android/data//files/dummy //」結尾的兩個斜槓技巧,它現在創建一個在Windows上可見的目錄文件,但是dummy仍然是一個文件。足夠我:)) http://stackoverflow.com/questions/13953744/file-mkdir-and-mkdirs-are-creating-file-instead-of-directory – Zekitez

0

我在Android 4.4.2上遇到了同樣的問題(這不是斜線問題)。

舉例來說,如果我想創建此目錄:

myRep/things/logs 

這將創建的第一個2個目錄,但「原木」將是一個文件,而不是一個目錄。

我喜歡通過登錄後添加另一個目錄解析:

myRep/things/logs/tmp 

現在TMP是一個文件,但日誌是最後一個目錄。

而且重要的,你需要在創建文件後做額外的東西,一些設備,這是爲我工作:

File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + '/' + pathToDirectory + "/tmp");  
directory.mkdirs(); 
directory.setExecutable(true); 
directory.setReadable(true); 
directory.setWritable(true); 
MediaScannerConnection.scanFile(context, new String[] {directory .toString()}, null, null); 
相關問題