Esto es lo que hago en una actividad para ampliar / modificar la lectura almacenada según sus necesidades
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt")));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
EDITAR: Mi respuesta tal vez sea inútil si su pregunta es sobre cómo hacerlo fuera de una actividad. Si su pregunta es simplemente cómo leer un archivo del activo, entonces la respuesta está arriba.
ACTUALIZACIÓN :
Para abrir un archivo que especifica el tipo, simplemente agregue el tipo en la llamada InputStreamReader de la siguiente manera.
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt"), "UTF-8"));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
EDITAR
Como @Stan dice en el comentario, el código que estoy dando no es un resumen de líneas. mLine
se reemplaza cada pase. Por eso escribí //process line
. Supongo que el archivo contiene algún tipo de datos (es decir, una lista de contactos) y cada línea debe procesarse por separado.
En caso de que simplemente desee cargar el archivo sin ningún tipo de procesamiento, tendrá que resumir mLine
en cada pase usando StringBuilder()
y agregando cada paso.
OTRA EDICIÓN
Según el comentario de @Vincent agregué el finally
bloque.
También tenga en cuenta que en Java 7 y superior puede usar try-with-resources
para usar las características AutoCloseable
y Closeable
de Java reciente.
CONTEXTO
En unos puntos comentario @LunarWatcher que getAssets()
es una class
de context
. Por lo tanto, si lo llama fuera de un activity
, debe consultarlo y pasar la instancia de contexto a la actividad.
ContextInstance.getAssets();
Esto se explica en la respuesta de @Maneesh. Entonces, si esto es útil para usted, vote su respuesta porque es él quien lo señaló.
finally {reader.close();}
.context.getAssets(.....)
solo funciona en Activity en otra clase que tengas que usar
Context
para ello.Haga que un constructor para la clase Utils pase la referencia de actividad (forma fea) o el contexto de aplicación como un parámetro para ello. Usando ese uso getAsset () en su clase Utils.
fuente
Context
.Mejor tarde que nunca.
Tuve dificultades para leer archivos línea por línea en algunas circunstancias. El método a continuación es el mejor que encontré, hasta ahora, y lo recomiendo.
Uso:
String yourData = LoadData("YourDataFile.txt");
Donde se supone que YourDataFile.txt reside en activos /
fuente
stream.available()
.fuente
input = new BufferedReader(new InputStreamReader(fIn));
.fuente
solución de una línea para kotlin:
fuente
getAssets()
El método funcionará cuando llame dentro de la clase Actividad.Si llama a este método en una clase que no es Actividad, entonces necesita llamar a este método desde el Contexto que se pasa desde la clase Actividad. Entonces, debajo está la línea en la que puede acceder al método.
ContextInstance
se puede pasar como este de la clase Actividad.fuente
Leer y escribir archivos siempre ha sido detallado y propenso a errores. Evite estas respuestas y simplemente use Okio en su lugar:
fuente
IOException
bloque try / catch de 2) Secuencias de cierre en caso de que se produzca una excepción 3) Este código lee una sola línea, no el archivo completo. En cuanto al rendimiento, esta biblioteca es definitivamente única en su tipo, sin duda. Ahora, dígame, ¿debo evitar "estas respuestas" e implementar Okio solo para leer archivos? La respuesta es NO, a menos que ya sea parte de su aplicación.Aquí hay un método para leer un archivo en activos:
fuente
Puede cargar el contenido del archivo. Considere que el archivo está presente en la carpeta de activos.
Ahora puede obtener el contenido llamando a la función de la siguiente manera
Teniendo en cuenta que data.json se almacena en Application \ app \ src \ main \ assets \ data.json
fuente
En MainActivity.java
Además, puede crear una clase separada que haga todo el trabajo.
En mi opinión, es mejor crear una interfaz, pero no es necesario
fuente
Si usa otra clase que no sea Actividad, es posible que desee hacer como,
fuente
Con Kotlin, puede hacer lo siguiente para leer un archivo de activos en Android:
fuente
Quizás sea demasiado tarde, pero por el bien de otros que buscan las respuestas color de rosa:
fuente
cityfile.txt
fuente
File no longer available That file has now been permanently removed and cannot be recovered
La clase Scanner puede simplificar esto.
fuente
@HpTerm responde la versión de Kotlin:
fuente
var mLine:String
debería servar mLine:String?
var data: String?
debería servar data = ""
tipo de retorno debería serString
Aquí es una manera de conseguir una
InputStream
para un archivo en laassets
carpeta sin unaContext
,Activity
,Fragment
oApplication
. Cómo obtienes los datos de esoInputStream
depende de usted. Hay muchas sugerencias para eso en otras respuestas aquí.Kotlin
Java
Todas las apuestas están canceladas si hay una costumbre
ClassLoader
en juego.fuente