¿Cómo obtener URI de un archivo de activos?

He estado tratando de obtener la ruta URI para un archivo de activos.

uri = Uri.fromFile(new File("//assets/mydemo.txt")); 

Cuando compruebo si el archivo existe, veo que el archivo no existe

 File f = new File(filepath); if (f.exists() == true) { Log.e(TAG, "Valid :" + filepath); } else { Log.e(TAG, "InValid :" + filepath); } 

¿Puede alguien decirme cómo puedo mencionar la ruta absoluta para un archivo existente en la carpeta de activos?

No existe una “ruta absoluta para un archivo existente en la carpeta de activos”. El contenido de los assets/ carpetas de su proyecto está empaquetado en el archivo APK. Use un objeto AssetManager para obtener un InputStream en un activo.

EDITAR

Para reparar uno de mis comentarios a continuación, la syntax de URL para los activos es file:///android_asset/... (nota: tres barras).

La URL correcta es:

 file:///android_asset/RELATIVEPATH 

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 recursos sin el 3. Intenté 2 como (anteriormente) comentado por CommonsWare y no funcionaría. Luego miré a la fuente de CommonsWare en github y noté la barra inclinada 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 en una versión superior.

EDITAR: CommonsWare actualizó su respuesta para reflejar este pequeño cambio. Así que he editado esto, así que todavía tiene sentido con su respuesta actual.

enter image description here

Asegúrese de que su carpeta de activos esté en la posición correcta.

Funciona para WebView pero parece fallar en URL.openStream() . Por lo tanto, debe distinguir los protocolos file: // y manejarlos a través de AssetManager según lo sugerido.

Por favor prueba este código funcionando bien

  Uri imageUri = Uri.fromFile(new File("//android_asset/luc.jpeg")); /* 2) Create a new Intent */ Intent imageEditorIntent = new AdobeImageIntent.Builder(this) .setData(imageUri) .build(); 

Prueba esto: funciona

 InputStream in_s = getClass().getClassLoader().getResourceAsStream("TopBrands.xml"); 

si tiene una excepción de valor nulo, pruebe este:

 InputStream in_s1 = TopBrandData.class.getResourceAsStream("/assets/TopBrands.xml"); 

TopBranData es una clase

 InputStream is = getResources().getAssets().open("terms.txt"); String textfile = convertStreamToString(is); public static String convertStreamToString(InputStream is) throws IOException { Writer writer = new StringWriter(); char[] buffer = new char[2048]; try { Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); int n; while ((n = reader.read(buffer)) != -1) { writer.write(buffer, 0, n); } } finally { is.close(); } String text = writer.toString(); return text; 

Sí, no puedes acceder a la carpeta de tu unidad desde tu teléfono Android o emulador porque tu computadora y Android son dos sistemas operativos diferentes. Me gustaría ir a la carpeta res de Android porque tiene buenos métodos de administración de recursos. Hasta ya menos que tengas muy buenas razones para poner tu archivo en la carpeta de activos. En cambio, puedes hacer esto

 try { Resources res = getResources(); InputStream in_s = res.openRawResource(R.raw.yourfile); byte[] b = new byte[in_s.available()]; in_s.read(b); String str = new String(b); } catch (Exception e) { Log.e(LOG_TAG, "File Reading Error", e); } 

prueba esto :

 Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.cat); 

Lo había hecho y funcionó

Funcionó para mí Pruebe este código

  uri = Uri.fromFile(new File("//assets/testdemo.txt")); File f = new File(testfilepath); if (f.exists() == true) { Toast.makeText(getApplicationContext(),"valid :" + testfilepath, 2000).show(); } else { Toast.makeText(getApplicationContext(),"invalid :" + testfilepath, 2000).show(); }