Hier ist, was ich in einer Aktivität zum gepufferten Lesen mache, erweitern / modifizieren, um es Ihren Bedürfnissen anzupassen
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: Meine Antwort ist vielleicht nutzlos, wenn Ihre Frage lautet, wie es außerhalb einer Aktivität gemacht werden soll. Wenn Ihre Frage einfach ist, wie man eine Datei aus einem Asset liest, ist die Antwort oben.
AKTUALISIEREN :
Um eine Datei mit dem Typ zu öffnen, fügen Sie den Typ einfach wie folgt in den InputStreamReader-Aufruf ein.
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
}
}
}
BEARBEITEN
Wie @Stan im Kommentar sagt, summiert der Code, den ich gebe, keine Zeilen. mLinewird bei jedem Durchgang ersetzt. Deshalb habe ich geschrieben//process line . Ich gehe davon aus, dass die Datei irgendeine Art von Daten enthält (dh eine Kontaktliste) und jede Zeile separat verarbeitet werden sollte.
Wenn Sie die Datei einfach ohne jegliche Verarbeitung laden möchten, müssen Sie sie mLinebei jedem Durchgang mit jedem Durchgang zusammenfassen StringBuilder()und anhängen.
Noch eine Bearbeitung
Nach dem Kommentar von @Vincent habe ich das hinzugefügt finally Block .
Beachten Sie auch, dass Sie in Java 7 und höher try-with-resourcesdie Funktionen AutoCloseableund CloseableFunktionen des aktuellen Java verwenden können.
KONTEXT
In einem Kommentar weist @LunarWatcher darauf hin, dass getAssets()es sich um ein classIn handelt context. Wenn Sie es also außerhalb von a aufrufen, activitymüssen Sie darauf verweisen und die Kontextinstanz an die Aktivität übergeben.
ContextInstance.getAssets();
Dies wird in der Antwort von @Maneesh erklärt. Wenn dies für Sie nützlich ist, stimmen Sie seiner Antwort zu, denn das ist er, der darauf hingewiesen hat.