Ich habe eine Datei in meinem Assets-Ordner ... wie lese ich sie?
Jetzt versuche ich:
%Vor%Aber es hat eine Nullzeiger-Ausnahme ausgelöst ...
Die Datei heißt "Ursprung" und befindet sich in den Ordner-Assets
Ich habe versucht, es zu übertragen:
%Vor%und
%Vor%aber beides gescheitert ... einen Ratschlag?
Sie können einen Eingabestream mit AssetsManager
öffnen.
getAssets()
ist eine Methode der Klasse Context
.
Beachten Sie auch, dass Sie keinen Zeichenpuffer ( buf = new char[1024]
, die letzte Zeile Ihres Zyklus) neu erstellen sollten.
Die readLine () -Methode von BufferedReader gibt eine Null zurück, wenn das Ende der Datei erreicht ist. Daher müssen Sie darauf achten und versuchen, sie an Ihre Zeichenfolge anzuhängen.
Der folgende Code sollte einfach genug sein:
%Vor%Einfach und auf den Punkt.
Es ist sehr einfach, sehr schnell und funktioniert gut für unangemessen große Textdateien (100+ MB)
(Code am Ende)
Oft ist es egal, aber diese Methode ist ziemlich schnell und gut lesbar. Tatsächlich ist es eine Ordnung der Komplexität, die schneller ist als die Antwort von @ Racemation - O (n) statt O (n ^ 2).
Ich habe sechs Methoden getestet (von langsam bis schnell):
Die Vorabzuweisung des Puffers ist bei sehr großen Dateien am schnellsten, aber die Methode ist nicht sehr vielseitig, da die gesamte Dateigröße im Voraus bekannt sein muss. Deshalb schlage ich vor, strBuilder mit char [] Puffern zu verwenden, es ist immer noch einfach und bei Bedarf leicht änderbar, um jeden Eingabestrom anstelle von nur Dateien zu akzeptieren. Aber es ist sicherlich schnell genug für alle vernünftigen Fälle.
Ps. Sie haben vielleicht bemerkt, dass StringBuffer etwas schneller als StringBuilder ist. Das ist ein bisschen Unsinn, weil die Klassen gleich sind, außer dass StringBuilder nicht synchronisiert ist. Wenn irgendjemand das nicht reproduzieren kann (...) bin ich sehr neugierig :)
Ich habe eine Funktion geschrieben, die dasselbe tut wie deine. Ich habe es vor einer Weile geschrieben, aber ich glaube, es funktioniert immer noch richtig.
%Vor%Jetzt können Sie diese Funktion verwenden, wenn Sie möchten, aber wenn Sie die Datei entweder durch ein Dateiobjekt oder eine Zeichenfolge übergeben, vergewissern Sie sich, dass Sie entweder den vollständigen Pfad der Datei angeben, z. B. "C: \ Programme" \ test.dat "ODER Sie geben den relativen Link von Ihrem Arbeitsverzeichnis ein. Ihr Arbeitsverzeichnis ist normalerweise das Verzeichnis, von dem aus Sie die Anwendung starten (außer Sie ändern es). Wenn sich die Datei also in einem Ordner namens data befindet, geben Sie "./data/test.dat"
einJa, ich weiß, dass dies mit Android funktioniert, so dass der Windows-URI nicht anwendbar ist, aber Sie sollten meinen Standpunkt verstehen.
Sie sollten org.appache.commons.io.IOUtils.toString(InputStream is)
versuchen, um den Dateiinhalt als String zu erhalten. Dort können Sie InputStream
object übergeben, das Sie von
in Ihrem Activity
.
Um String
zu erhalten, verwenden Sie Folgendes:
Tags und Links java android file-io android-assets