2011-10-12 22 views
13

yo estaba tratando de abrir un archivo para lectura.archivo abierto Android

En el uso: Scanner input = new Scanner(filename); el archivo no se pudo encontrar

pero cuando lo utiliza:

InputStream in = openFileInput(filename); 
Scanner input = new Scanner(in); 

funcionó. ¿Por qué la primera línea de código estaba equivocada?

Respuesta

10

Los archivos se almacenan en el dispositivo en una ubicación específica, dependiente de la aplicación, que es lo que supongo openFileInput añade al principio del nombre de archivo. El resultado final (ubicación + nombre del archivo) se construye como sigue:

/data/data/<application-package>/files/<file-name> 

Tenga en cuenta también que la documentación indica que el parámetro openFileInputcannot contain path separators.

Para evitar la codificación forzada de la ruta de ubicación, que en principio podría ser diferente de un dispositivo a otro, puede obtener un objeto File apuntando al directorio de almacenamiento llamando al getFilesDir, y usarlo para leer cualquier archivo que desee a. Por ejemplo:

File filesDir = getFilesDir(); 
Scanner input = new Scanner(new File(filesDir, filename)); 

Tenga en cuenta que la construcción de un Scanner pasando un String como parámetro resultaría en el escáner trabajando en el contenido de la cadena, es decir, interpretándolo como el contenido real para escanear en lugar de como el nombre de un archivo para abrir

+0

gracias !! utilicé el constructor equivocado al principio: P .. intenté usar Scanner sc = new Scanner (nuevo archivo (nombre de archivo)); pero no funcionó ... File filesDir = getFilesDir(); Entrada de escáner = nuevo escáner (nuevo archivo (directorio de archivos, nombre de archivo)); esto funciona muy bien: D – zSt

-4
Scanner sc = new Scanner(new File(filename)); 
+10

¿Podrían presentar más información? Lanzar el código no ayuda a nadie ... – WarrenFaith

9

Esto me volvio loco hace unos minutos. Se me olvidó añadir esta línea a manifestar:

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

me esperaba un permiso denegado mensaje. Pero acaba de recibir un archivo que no se encuentra ...

En su caso:openFileInput abre un archivo en el directorio de datos de aplicación privada (/data/data/your.package/filename). Esto nunca falla. Pero el escáner intenta abrirlo en la ruta raíz. Por lo tanto, cuando desee leer un archivo de la tarjeta SD, deberá usar Environement.getExternalStorageDirectory().getAbsolutePath() + "/" + filename.

Cuestiones relacionadas