¿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 hay "ruta absoluta para un archivo existente en la carpeta de activos". El contenido de los assets/ carpeta del proyecto se empaquetan en el archivo APK. Utilice un objeto AssetManager para obtener un InputStream en un recurso.

EDITAR

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

La url correcta es:

 file:///android_asset/RELATIVEPATH 

Donde RELATIVEPATH es la ruta de acceso a su recurso en relación con la carpeta de activos.

Observe los 3 / 's en el esquema. La vista Web no cargaría ninguno de mis activos sin 3. He intentado 2 como (previamente) comentado por CommonsWare y no funcionaría. Entonces miré la fuente de CommonsWare en github y noté la barra inclinada extra.

Esta prueba, aunque sólo se hizo en el emulador de 1.6 Android, pero dudo que sea diferente en un dispositivo real o una versión superior.

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

Funciona para WebView pero parece fallar en URL.openStream() . Así que necesitas distinguir los protocolos file: // y manejarlos a través de AssetManager como se sugiere.

Pruebe esto: funciona

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

Si tiene una excepción de valor nulo, pruebe esta:

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

TopBranData es una clase

Introduzca aquí la descripción de la imagen

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

 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í, usted no puede acceder a su carpeta de la unidad de su teléfono o emulador de Android, ya que su equipo y Android son dos diferentes OS.I iría para la carpeta res de Android, ya que tiene buenos métodos de gestión de recursos. Hasta ya menos que tenga muy buenas razones para ponerle archivo en la carpeta de activos. En su lugar puede 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 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(); 

Trabajó 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(); } 

prueba esto :

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

Lo hice y funcionó

  • Recurso de cadena con símbolo "%"
  • Diferentes carpetas de valores en android
  • Agregar valor de punto flotante a los recursos / valores de Android
  • Cómo eliminar fácilmente los recursos de localización innecesarios de bibliotecas añadidas en la versión APK
  • Bitmaps de Android en la memoria de fugas xml?
  • Configuración de la configuración regional de la aplicación en pt_BR mediante programación
  • Android: getString () de los recursos pierde las etiquetas de la cadena
  • Android - colors.xml recurso a valor int
  • Temas descargables en Android
  • El elemento ListView no permanecerá "seleccionado"
  • ¿Por qué resource.getStringArray (int) lanzará una excepción?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.