He estado tratando de obtener la ruta URI para un archivo de activos.
uri = Uri.fromFile(new File("//assets/mydemo.txt"));
Cuando verifico si el archivo existe, veo que ese archivo no existe
File f = new File(filepath);
if (f.exists() == true) {
Log.e(TAG, "Valid :" + filepath);
} else {
Log.e(TAG, "InValid :" + filepath);
}
¿Alguien puede decirme cómo puedo mencionar la ruta absoluta para un archivo existente en la carpeta de activos?
file://android_asset/...
, donde...
está la ruta relativa dentro delassets/
directorio de su proyecto .file://android_asset/
, aunque no paraUri
: github.com/commonsguy/cw-advandroid/tree/master/WebView/GeoWeb1file:///
.new File("file:///android_asset/sounds/beep.mid");
, pero el archivo de resultados no existe. ¿Algunas ideas? El archivo PS está en laassets/sounds/
carpeta.La url correcta es:
donde RELATIVEPATH es la ruta a su recurso en relación con la carpeta de activos.
Tenga en cuenta los 3 / 's en el esquema. La vista web no cargaría ninguno de mis activos sin el 3. Probé 2 como (anteriormente) comentó CommonsWare y no funcionaría. Luego miré la fuente de CommonsWare en github y noté la barra diagonal adicional.
Sin embargo, esta prueba solo se realizó en el emulador de Android 1.6, pero dudo que sea diferente en un dispositivo real o una versión superior.
EDITAR: CommonsWare actualizó su respuesta para reflejar este pequeño cambio. Así que he editado esto para que todavía tenga sentido con su respuesta actual.
fuente
String fileName = "file:///android_asset/file.csv";
System.out.println(new File(fileName).exists()); // prints false
File
que acepta una cadena espera una ruta, no un URI . No he codificado para Android durante unos años y las cosas pueden haber cambiado. No estoy seguro de si puede acceder a la carpeta de activos incrustados utilizando una clase de archivo Java normal. Me parece recordar que tienes que usar un AssetManager . Los archivos en la carpeta de activos se colocan en el dispositivo en el APK incluido de solo lectura y se comprimen (los APK son en realidad archivos zip), por lo tanto, se necesita más trabajo para volver a leerlo. Pruebe algo comonew File(new URI(filename))
Intenta que este código funcione bien
fuente
Finalmente, encontré una forma de obtener la ruta de un archivo que está presente en los activos de esta respuesta en Kotlin. Aquí estamos copiando el archivo de activos en la memoria caché y obteniendo la ruta del archivo desde ese archivo de memoria caché.
Obtenga la ruta al archivo como:
fuente
fileName
tiene el directoriodir/file
. Se bloqueará con la ruta quecache/dir/file
no existe. También creo que es mejor tener una verificaciónif(!it.exist)
dentro delalso
bloque, entonces no copiará el archivo cada vez que incluso el archivo ya esté en el cachéif(!it.exist)
arroja un error de referencia sin resolver. alguna solución ?if(!it.exist)
debería poner antesit.outputStream()
...Asegúrese de que su carpeta de activos esté en la posición correcta.
fuente
sourceSets { main { assets.srcDirs = ['src/main/assets'] } }
Funciona para WebView pero parece fallar
URL.openStream()
. Por lo tanto, debe distinguir los protocolos file: // y manejarlos a través de AssetManager como se sugiere.fuente
Prueba esto, funciona:
Si obtiene una excepción de valor nulo, intente esto (con clase
TopBrandData
):fuente
fuente
prueba esto :
Lo hice y funcionó
fuente
Sí, no puedes acceder a la carpeta de tu unidad desde tu teléfono o emulador de Android porque tu computadora y Android son dos sistemas operativos diferentes. Yo elegiría la carpeta de Android porque tiene buenos métodos de administración de recursos. Hasta y a menos que tenga muy buenas razones para colocar su archivo en la carpeta de activos. En cambio, puedes hacer esto
fuente
Trabajó para mí Prueba este código
fuente