Jeśli utworzysz obiekt File, który otacza katalog najwyższego poziomu, możesz nazwać go metodą mkdirs () w celu zbudowania wszystkich potrzebnych katalogów. Coś jak:
// create a File object for the parent directory
File wallpaperDirectory = new File("/sdcard/Wallpaper/");
// have the object build the directory structure, if needed.
wallpaperDirectory.mkdirs();
// create a File object for the output file
File outputFile = new File(wallpaperDirectory, filename);
// now attach the OutputStream to the file object, instead of a String representation
FileOutputStream fos = new FileOutputStream(outputFile);
Uwaga: rozsądne może być użycie Environment.getExternalStorageDirectory () do uzyskania katalogu „SD Card”, ponieważ może się to zmienić, jeśli pojawi się telefon, który ma coś innego niż kartę SD (np. Wbudowaną pamięć flash, a iPhone). Tak czy inaczej, należy pamiętać, że należy sprawdzić, czy rzeczywiście tam jest, ponieważ karta SD może zostać wyjęta.
AKTUALIZACJA: Od poziomu API 4 (1.6) musisz również poprosić o pozwolenie. Coś takiego (w manifeście) powinno działać:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Miałem ten sam problem i chcę tylko dodać, że plik AndroidManifest.xml wymaga również tego uprawnienia:
źródło
Oto, co działa dla mnie.
w swoim manifeście i poniższym kodzie
źródło
Właściwie użyłem części asfwer @fiXedd i zadziałało to dla mnie:
Upewnij się, że używasz mkdirs (), a nie mkdir () do utworzenia pełnej ścieżki
źródło
File.mkdirs()
. Następnie pokazał przykład użycia go.W przypadku API 8 i nowszych położenie karty SD uległo zmianie. Odpowiedź @ fiXedd jest dobra, ale dla bezpieczniejszego kodu należy użyć,
Environment.getExternalStorageState()
aby sprawdzić, czy nośnik jest dostępny. Następnie możesz użyć,getExternalFilesDir()
aby przejść do wybranego katalogu (zakładając, że używasz interfejsu API 8 lub nowszego).Możesz przeczytać więcej w dokumentacji SDK .
źródło
Upewnij się, że dostępna jest pamięć zewnętrzna: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
źródło
Nie zapomnij upewnić się, że w nazwach plików / folderów nie ma żadnych znaków specjalnych. Zdarzyło mi się, gdy „:” ustawiałem nazwy folderów przy użyciu zmiennych
niedozwolone znaki w nazwach plików / folderów
W takim przypadku kod może być pomocny.
Poniższy kod usuwa wszystkie „:” i zastępuje je „-”
źródło
Napotkałem ten sam problem. Istnieją dwa rodzaje uprawnień w Androidzie:
Oto strategia uzyskiwania niebezpiecznych uprawnień w systemie Android 6.0
onRequestPermissionsResult
Oto moja sprawa: muszę pisać w pamięci zewnętrznej.
Najpierw sprawdzam, czy mam pozwolenie:
Następnie sprawdź zgodę użytkownika:
źródło
Miałem ten sam problem, nie mogłem utworzyć katalogu na Galaxy S, ale udało mi się go utworzyć z powodzeniem na Nexusie i Samsungu Droidie. Jak to naprawiłem, dodając następujący wiersz kodu:
źródło
spowoduje to utworzenie folderu o nazwie dor na twojej karcie SD. następnie, aby pobrać plik np. nazwa_pliku.json, który jest ręcznie wstawiany do folderu dor . Lubić:
<używa-uprawnień android: nazwa = "android.permission.WRITE_EXTERNAL_STORAGE" />
i nie zapomnij dodać kodu w manifeście
źródło
źródło
Właśnie uzupełniam wpis Vijay ...
Oczywisty
Funkcjonować
Stosowanie
Możesz sprawdzić błędy
źródło
źródło
Możesz użyć / sdcard / zamiast Environment.getExternalStorageDirectory ()
źródło
źródło