Mam plik words.txt
, który umieściłem w folderze res/raw. Słowa w pliku są oddzielone spacją. Ciężko mi pisać kod Android/Java, aby czytać plik słowo po słowie.Czytanie pliku tekstowego z Androidem
Odpowiedz
Czytaj od res/raw
folderu String
InputStream inputStream = getResources().openRawResource(R.raw.yourtextfile);
BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(inputStream));
String eachline = bufferedReader.readLine();
while (eachline != null) {
// `the words in the file are separated by space`, so to get each words
String[] words = eachline.split(" ");
eachline = bufferedReader.readLine();
}
Aby dostać słowa z pliku z surowego folderze spróbować z następującym podejściu
odczytać dane z surowego folderu za pomocą getResources().openRawResource(R.raw.song);
Następnie uzyskać InputStream dane w tablicy bajtowej podziel dane za pomocą spacji.
użyć następującego kodu
InputStream is =getResources().openRawResource(R.raw.song);
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
byte[] myData = baf.toByteArray();
String dataInString = new String(myData);
String[] words = dataInString.split(" ");
Dzięki Deepak
-1 do czytania bajt po bajcie ... widziałem ten wzór: 'while ((aktywa = bis .read())! = -1) {... 'w wielu odpowiedziach ... facet, który opublikował (nie ty) najpierw powinien być sfilmowany – Selvin
Najprostszym jest użycie Scanner.
Scanner s = new Scanner(getResources().openRawResource(R.raw.text_file));
try {
while (s.hasNext()) {
String word = s.next();
// ....
}
} finally {
s.close();
}
Domyślnym ogranicznikiem jest biały znak (w tym spacja). Jeśli chcesz, aby uruchamiał się tylko w przestrzeni, po jej utworzeniu użyj s.useDelimiter(" ");
.
Używanie tego kodu z plikiem tekstowym, który ma tylko kilka słów, działa po prostu w porządku. Ale kiedy używam pliku zawierającego około 100 000 słów, emulator przestaje odpowiadać. Czemu myślisz? –
Cóż ... To jest wadą tego rozwiązania, ponieważ 'Skaner' tworzy nowe łańcuchy dla każdego połączenia z' next() ', co może być kosztowne. Ale to jest naprawdę ** inny problem i powinien zostać zadany w nowym pytaniu ** (* Używałbym rozwiązania @Sunil Kumar Sahoo, jeśli masz pliki tak duże, ponieważ metoda 'split (..)' nie tworzy nowych ciągów, ale ponownie wykorzystuje ciąg podstawowy *). – dacwe
Miałem to samo pytanie i chociaż powyższe odpowiedzi są prawdopodobnie poprawne, nie udało mi się przekonać ich do pracy z powodzeniem. To było prawie na pewno błąd operatora i ignorancja z mojej strony - ale tylko w przypadku, gdy ktoś chce zobaczyć jak ja - n00b - w końcu to zrobił, tutaj jest moje rozwiązanie:
// this is just the click handler for a button...
public void loadStatesHandler(View v) {
try {
String states = getStringFromRaw(this);
readOutput.setText(states);
}
catch(Throwable t) {
t.printStackTrace();
}
}
private String getStringFromRaw(Context c) throws IOException {
Resources r = c.getResources();
InputStream is = r.openRawResource(R.raw.states);
String statesText = convertStreamToString(is);
is.close();
return statesText;
}
private String convertStreamToString(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = is.read();
while (i != -1) {
baos.write(i);
i = is.read();
}
return baos.toString();
}
Nie jestem dokładnie pewien, dlaczego to działało dla mnie, gdy powyższe nie było, ponieważ nie wydaje się zasadniczo różne - ale jak powiedziałem - prawdopodobnie był to błąd operatora z mojej strony.
Chciałbym również usłyszeć wszelkie opinie na temat skuteczności (lub jej braku!) Tej metody w porównaniu do tej, którą zaproponował Sunil Kumar Sahoo ... –
//put your text file to raw folder, raw folder must be in resource folder.
private TextView tv;
private Button btn;
btn = (Button)findViewById(R.id.btn_json);
tv = (TextView)findViewById(R.id.tv_text);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SimpleText();
}
});
private void SimpleText(){
try {
InputStream is = this.getResources().openRawResource(R.raw.simpletext);
byte[] buffer = new byte[is.available()];
while (is.read(buffer) != -1);
String jsontext = new String(buffer);
tv.setText(jsontext);
} catch (Exception e) {
Log.e(TAG, ""+e.toString());
}
}
- 1. Czytanie osadzonego pliku tekstowego
- 2. czytanie pliku tekstowego w C#
- 3. Czytanie wielu liczb z pliku tekstowego
- 4. Czytanie z pliku tekstowego - Cel C
- 5. Czytanie z pliku tekstowego w języku C#
- 6. Czytanie pliku tekstowego rozdzielanego przecinkami w Fortranie
- 7. Czytanie pliku tekstowego - fopen vs. ifstream
- 8. Czytanie pliku tekstowego w archiwum wojennym
- 9. Czytanie pliku tekstowego w Google GWT?
- 10. Czytanie pliku tekstowego z wieloma spacjami jako ogranicznikiem w R
- 11. Czytanie z pliku tekstowego rozdzielanego przecinkami lub tabulatorami
- 12. Czytanie z pliku tekstowego w Android Studio Java
- 13. C++ czytanie z pliku tekstowego do tablicy/ciągu znaków
- 14. Czytanie RFID z telefonami z Androidem
- 15. Czytanie wysokościomierza z Androidem jest nieprawidłowe?
- 16. Czytanie pliku tekstowego i przekształcanie go w ciąg znaków
- 17. Czytanie krótkiego pliku tekstowego na ciąg w szybkim tempie
- 18. Pliku pliku tekstowego z Python
- 19. Czytanie pliku z folderu zasobów
- 20. Czytanie pliku binarnego z pythonem
- 21. Czytanie pliku .vtk z pytonem
- 22. Czytanie pliku Strings.xml z pliku apk
- 23. Czytanie pliku wewnątrz pliku Makefile
- 24. Czytanie z pola tekstowego w oknie innej aplikacji
- 25. Czytanie pliku .pdb
- 26. Zaawansowane czytanie pliku
- 27. Czytanie pliku Windows * .dmp
- 28. Czytanie z pliku i przechowywanie w tablicy
- 29. C# - Czytanie rosyjskiego tekstu z pliku .txt
- 30. Czytanie nazwy pospolitej z pliku .pem
znalazłem najlepsze rozwiązanie tutaj: http://stackoverflow.com/a/5675934/336990 – CoDe