Se você criar um objeto File que agrupe o diretório de nível superior, poderá chamar seu método mkdirs () para criar todos os diretórios necessários. Algo como:
// 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);
Nota: Pode ser aconselhável usar Environment.getExternalStorageDirectory () para obter o diretório "Cartão SD", pois isso pode mudar se um telefone aparecer com algo diferente de um cartão SD (como flash embutido, a Iphone). De qualquer forma, lembre-se de que você precisa verificar se ele está realmente lá, pois o cartão SD pode ser removido.
ATUALIZAÇÃO: desde o nível 4 da API (1.6), você também precisará solicitar a permissão. Algo assim (no manifesto) deve funcionar:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Teve o mesmo problema e apenas deseja adicionar que AndroidManifest.xml também precisa desta permissão:
fonte
Aqui está o que funciona para mim.
no seu manifesto e no código abaixo
fonte
Na verdade, usei parte do @fiXedd asnwer e funcionou para mim:
Verifique se você está usando mkdirs () e não mkdir () para criar o caminho completo
fonte
File.mkdirs()
. Ele então mostrou um exemplo de uso.Com a API 8 e superior, a localização do cartão SD mudou. A resposta do @ fiXedd é boa, mas para um código mais seguro, você deve
Environment.getExternalStorageState()
verificar se a mídia está disponível. Em seguida, você pode usargetExternalFilesDir()
para navegar para o diretório desejado (supondo que você esteja usando a API 8 ou superior).Você pode ler mais na documentação do SDK .
fonte
Verifique se o armazenamento externo está presente: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
fonte
Não se esqueça de verificar se você não possui caracteres especiais nos nomes dos arquivos / pastas. Aconteceu comigo com ":" quando eu estava definindo nomes de pastas usando variáveis
caracteres não permitidos nos nomes de arquivos / pastas
Você pode achar esse código útil nesse caso.
O código abaixo remove todos os ":" e os substitui por "-"
fonte
Eu enfrentei o mesmo problema. Existem dois tipos de permissões no Android:
Aqui está a estratégia para obter permissões perigosas no Android 6.0
onRequestPermissionsResult
Aqui está o meu caso: preciso gravar no armazenamento externo.
Primeiro, verifico se tenho a permissão:
Em seguida, verifique a aprovação do usuário:
fonte
Eu estava enfrentando o mesmo problema, incapaz de criar um diretório no Galaxy S, mas consegui criá-lo com sucesso no Nexus e no Samsung Droid. Como eu o consertei adicionando a seguinte linha de código:
fonte
isso criará uma pasta chamada dor no seu sdcard. em seguida, para buscar o arquivo para eg- filename.json, que é inserido manualmente na pasta dor . Gostar:
<permissão de uso android: name = "android.permission.WRITE_EXTERNAL_STORAGE" />
e não se esqueça de adicionar código no manifesto
fonte
fonte
Acabando de publicar a publicação de Vijay ...
Manifesto
Função
Uso
Você pode verificar se há erros
fonte
fonte
Você pode usar / sdcard / em vez de Environment.getExternalStorageDirectory ()
fonte
fonte