2011-03-28 18 views

Respuesta

67
Environment.getExternalStorageDirectory().getAbsolutePath() 

Le da la ruta completa de la tarjeta SD. A continuación, puede realizar operaciones normales de E/S de archivos utilizando Java estándar.

Aquí está un ejemplo sencillo para escribir un archivo:

String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); 
String fileName = "myFile.txt"; 

// Not sure if the/is on the path or not 
File f = new File(baseDir + File.separator + fileName); 
f.write(...); 
f.flush(); 
f.close(); 

Editar:

Vaya - que quería un ejemplo para la lectura ...

String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); 
String fileName = "myFile.txt"; 

// Not sure if the/is on the path or not 
File f = new File(baseDir + File.Separator + fileName); 
FileInputStream fiStream = new FileInputStream(f); 

byte[] bytes; 

// You might not get the whole file, lookup File I/O examples for Java 
fiStream.read(bytes); 
fiStream.close(); 
+35

No se olvide de comprobar si el almacenamiento externo se monta:. 'Environment.getExternalStorageState() es igual a (Environment.MEDIA_MOUNTED)' – Mannaz

+1

buen comentario, Mannaz! BTW, ¿qué biblioteca necesita incluir para usar estas llamadas? ¿Es Android.os.Environment por casualidad? – gonzobrains

+0

sí, importar android.os.Environment; – debracey

34

Tener en cuenta sin embargo, que getExternalStorageDirectory() no va a funcionar correctamente en algunos teléfonos, por ejemplo mi Motorola razr maxx, ya que tiene 2 tarjetas/mnt/sdcard y/mnt/sdcard-ext - para tarjetas SD internas y externas respetuosamente. Recibirá la respuesta/mnt/sdcard solo cada vez. Google debe proporcionar una forma de lidiar con dicha situación. Como hace que muchas aplicaciones sensibles a la tarjeta SD (es decir, la copia de seguridad de la tarjeta) fallen miserablemente en estos teléfonos.

+0

Lo mismo aquí con Galaxy Tab 2 GT-P3110 ... Me preguntaba por qué mi base de datos no se copió en la tarjeta SD y me acabo de dar cuenta de que hay 2 tarjetas como usted dijo ... ¡cómo perder horas de depuración para nada! – Mirko

+1

Es posible que un dispositivo que use una partición del almacenamiento interno para el almacenamiento externo también pueda ofrecer una ranura para tarjeta SD. En este caso, la tarjeta SD no forma parte del almacenamiento externo y su aplicación no puede acceder a ella (el almacenamiento adicional está destinado solo a los medios proporcionados por el usuario que escanea el sistema). –

+0

@Tim Aquí estoy enfrentando un problema como este. En Nexus 5 solo tiene almacenamiento incorporado y Micromax a114 canvas 2.2 tiene capacidad de almacenamiento ampliable. Mi problema es que cuando intento descargar algunos archivos de mi aplicación no se descargan. Y el Medio Ambiente.MEDIA_MOUNTED lo que significa? –

0

Como se describe en la documentación Environment.getExternalStorageDirectory():

Environment.getExternalStorageDirectory() retorno primario directorio compartido de almacenamiento externo /.

Este es un ejemplo de cómo utilizar la lectura de una imagen:

String fileName = "stored_image.jpg"; 
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); 
String pathDir = baseDir + "/Android/data/com.mypackage.myapplication/"; 

File f = new File(pathDir + File.separator + fileName); 

     if(f.exists()){ 
      Log.d("Application", "The file " + file.getName() + " exists!"; 
     }else{ 
      Log.d("Application", "The file no longer exists!"; 
     } 
+0

Como mencionó, con' getExternalStorageDirectory() 'podemos crear un nuevo directorio en el almacenamiento preferido por el usuario (que generalmente es la memoria interna). Entonces, ¿qué sucede si el almacenamiento predeterminado se ha configurado como 'Memoria externa' y no es ** legible/grabable **? ¿Esto arroja una excepción? o se creará automáticamente en 'Almacenamiento interno'? –

Cuestiones relacionadas