Leer archivo de activos como cadena

Me gustaría leer el contenido de un archivo ubicado en los activos como una cadena. Por ejemplo, un documento de texto ubicado en src/main/assets/

Pregunta original
He encontrado que esta pregunta se utiliza principalmente como un "FAQ" para la lectura de un archivo de activos, por lo tanto he resumido la pregunta anterior. Abajo está mi pregunta ingenua original

Estoy tratando de leer un archivo de activos como cadena, he intentado como 20 respuestas aquí, pero no funcionan para mí.

Tengo un archivo en mi carpeta de activos: data.opml, y tengo que poner el contenido en una cadena. Lo envío como:

  OPML.importFromFile(string, MainTabActivity.this); 

Y recibirlo como:

  importFromFile(String filename, Context context); 

Algo que funcionó (pero no es un archivo de activos):

  OPML.importFromFile(new StringBuilder(Environment.getExternalStorageDirectory().toString()).append(File.separator).append(fileNames[which]).toString(),MainTabActivity.this); 

He intentado:

  AssetFileDescriptor descriptor = getAssets().openFd("data.opml"); FileReader reader = new FileReader(descriptor.getFileDescriptor()); And also: InputStream input = getAssets().open("data.opml"); Reader reader = new InputStreamReader(input, "UTF-8"); 

Maby Estoy haciendo algo mal, pero simplemente no funcionará porque el proyecto da errores (respectivamente: OPML no es capaz de los argumentos filereader y lector), Si alguien sabe cómo hacer esto, sería muy apreciado!

getAssets().open() devolverá un InputStream . Lea desde el uso de Java I / O estándar:

  StringBuilder buf=new StringBuilder(); InputStream json=getAssets().open("book/contents.json"); BufferedReader in= new BufferedReader(new InputStreamReader(json, "UTF-8")); String str; while ((str=in.readLine()) != null) { buf.append(str); } in.close(); 

Y, en el futuro, por favor explique de forma completa y precisa lo que quiere decir con "no trabajar", ya que esa explicación no es muy útil.

Hay un pequeño bug. El código de CommonsWare: los caracteres de nueva línea se descartan y no se añaden a la cadena. He aquí un código fijo listo para copiar + pegar:

 private String loadAssetTextAsString(Context context, String name) { BufferedReader in = null; try { StringBuilder buf = new StringBuilder(); InputStream is = context.getAssets().open(name); in = new BufferedReader(new InputStreamReader(is)); String str; boolean isFirst = true; while ( (str = in.readLine()) != null ) { if (isFirst) isFirst = false; else buf.append('\n'); buf.append(str); } return buf.toString(); } catch (IOException e) { Log.e(TAG, "Error opening asset " + name); } finally { if (in != null) { try { in.close(); } catch (IOException e) { Log.e(TAG, "Error closing asset " + name); } } } return null; } 

También puede hacerlo, sin usar bucles. Es bastante simple

 AssetManager assetManager = getAssets(); InputStream input; String text = ""; try { input = assetManager.open("test.txt"); int size = input.available(); byte[] buffer = new byte[size]; input.read(buffer); input.close(); // byte buffer into a string text = new String(buffer); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.v("TAG", "Text File: " + text); 
  • XML dentro de un recurso de cadena de Android?
  • Problemas de conversión de entero en cadena
  • ¿Cómo obtener el ancho de la cadena en Android?
  • Error: (218) Apóstrofo no precedido por \
  • Android - cómo reemplazar parte de una cadena por otra cadena?
  • Eliminación de espacios de la cadena
  • Cómo combinar conjuntos de imágenes, cadenas y enteros, en un formato fácil de mantener
  • ¿Cómo especificar el tamaño correcto del diálogo en el archivo de disposición XML para el diálogo de Android?
  • Cómo borrar el búfer de InputStream bluetooth
  • División de una cadena con "\" en android
  • Cómo convertir una cadena en un android.net.Uri
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.