Oto, co robię w ćwiczeniu polegającym na rozszerzaniu / modyfikowaniu buforowanego odczytu w celu dostosowania do twoich potrzeb
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
}
}
}
EDYCJA: Moja odpowiedź jest być może bezużyteczna, jeśli twoje pytanie dotyczy tego, jak to zrobić poza zajęciem. Jeśli twoje pytanie dotyczy po prostu sposobu odczytywania pliku z zasobu, odpowiedź jest powyżej.
AKTUALIZACJA :
Aby otworzyć plik określający typ, po prostu dodaj typ w wywołaniu InputStreamReader w następujący sposób.
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
}
}
}
EDYTOWAĆ
Jak @Stan mówi w komentarzu, kod, który podaję, nie sumuje wierszy. mLinejest wymieniany przy każdym przejściu. Dlatego napisałem //process line. Zakładam, że plik zawiera jakieś dane (np. Listę kontaktów) i każda linia powinna być przetwarzana osobno.
W przypadku, gdy chcesz po prostu załadować plik bez żadnego przetwarzania, będziesz musiał podsumować mLinekażdy przebieg, używając StringBuilder()i dołączając każdy przebieg.
KOLEJNA EDYCJA
Zgodnie z komentarzem @Vincent dodałem finallyblokadę.
Należy również pamiętać, że w Javie 7 i górną można użyć try-with-resourcesdo używania AutoCloseablei Closeablewyposażony ostatniej Java.
KONTEKST
Za punkty komentarz @LunarWatcher się, że getAssets()jest classw context. Tak więc, jeśli wywołujesz to poza obiektem activity, musisz się do niego odwołać i przekazać wystąpienie kontekstu do działania.
ContextInstance.getAssets();
Jest to wyjaśnione w odpowiedzi @Maneesh. Więc jeśli jest ci to przydatne, zagłosuj za jego odpowiedzią, ponieważ to on wskazał na to.