Ecco cosa faccio in un'attività di lettura buffer estesa / modificata per soddisfare le tue esigenze
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
}
}
}
EDIT: la mia risposta è forse inutile se la tua domanda è su come farlo al di fuori di un'attività. Se la tua domanda è semplicemente come leggere un file dall'asset, la risposta è sopra.
AGGIORNAMENTO :
Per aprire un file specificando il tipo, è sufficiente aggiungere il tipo nella chiamata InputStreamReader come segue.
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
}
}
}
MODIFICARE
Come dice @Stan nel commento, il codice che sto dando non sta riassumendo le righe. mLineviene sostituito ad ogni passaggio. Ecco perché ho scritto //process line. Presumo che il file contenga una sorta di dati (cioè un elenco di contatti) e ogni riga dovrebbe essere elaborata separatamente.
Nel caso in cui desideri semplicemente caricare il file senza alcun tipo di elaborazione, dovrai riassumere mLinead ogni passaggio utilizzando StringBuilder()e accodando ogni passaggio.
UN ALTRO EDIT
Secondo il commento di @Vincent ho aggiunto il finallyblocco.
Si noti inoltre che in Java 7 e superiore è possibile utilizzare try-with-resourcesdi utilizzare la AutoCloseablee Closeablecaratteristiche di recente Java.
CONTESTO
In un commento @LunarWatcher sottolinea che getAssets()è un classin context. Quindi, se lo chiami al di fuori di un, activitydevi fare riferimento ad esso e passare l'istanza di contesto all'attività.
ContextInstance.getAssets();
Questo è spiegato nella risposta di @Maneesh. Quindi, se questo è utile per te, vota la sua risposta perché è lui che l'ha sottolineato.