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
- Android: ¿hay una manera fácil de encontrar todas las cadenas en mi proyecto?
- Dibujable en recurso de cadena
- Android string.xml lectura html tags problema
- String se está reduciendo en AsyncTask
- Diferentes maneras de obtener un recurso de cadena
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!
- Pasar una cadena al código C en Android NDK
- Formato Editar vista de texto para los números de teléfono
- Android strings.xml resource - idioma árabe y cadenas de formato dinámico
- Cómo dividir una cadena en varios bloques de caracteres?
- Android cómo usar el recurso de cadena en una clase java
- ¿Todas las cadenas de strings.xml están siempre disponibles en memoria heap en Android?
- Cadenas en android / java, replace () no hace nada
- Validación de un número de celda en Android
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);
- WebViewClient onReceivedError obsoleta, la nueva versión no detecta todos los errores
- ¿Limpiar automáticamente LogCat en cada depuración / ejecución de Eclipse?