Ich packe eine Textdatei mit meiner Android-App (in Assets), die ich in der App selbst gelesen habe.
Um zu vermeiden, dass diese Datei komprimiert wird, Es heißt "mytestfile.mp3" und bis vor kurzem hat das gut funktioniert.
Bei einer der letzten Änderungen von SDK / ADT scheint beim Lesen etwas "Seltsames" zu passieren Assets und ich bin offen für Ideen, was es ist ...
Ich benutze Code wie diesen
AssetFileDescriptor descriptor = getAssets().openFd("mytextfile.mp3");
BufferedReader f = new BufferedReader(new FileReader(descriptor.getFileDescriptor()));
String line = f.readLine();
while (line != null) {
// do stuff
Log.d("TAG",line);
}
Was ich jetzt aus dem Protokoll sehe, ist ziemlich seltsam - wenn die Datei etwas Ähnliches enthielt
Fred
Barney
Wilma
Ich sehe im Protokoll so viel Unfug wie diesen:
��ߴ�!�c�W���6�f����m�>ߩ��? ?? ' 6 # 6 l0 mp
gefolgt von eventuell meinem Textinhalt
Fred
Barney
Wilma
gefolgt von einer weiteren Tonne Kauderwelsch - von denen einige so aussehen
4 u? ' res / drawable-mdpi / icon.pngPK | v?, ' res / layout-land / dialog_color_picker.xmlPK | v? 1 ! t2 classes.dexPK | v? Թ V ڝ 5 META-INF / MANIFEST.MFPK | v? v j ETMETA-INF/CERT.SFPK |v?W7@ ] "META-INF / CERT.RSAPK"?
Dies liegt daran, dass AssetFileDescriptor.getFileDescriptor()
für Ihre .apk-Datei und nicht für die mytextfile.mp3
-Datei in der .apk-Datei ist. Um mit AssetFileDescriptor
arbeiten zu können, müssen Sie z. AssetFileDescriptor.getStartOffset()
wird ebenfalls berücksichtigt. Dies ist der Versatz zur tatsächlichen Datei, d. H. mytextfile.mp3
in Ihrem Fall.
Es gibt jedoch eine einfache Lösung für Ihr Problem. Verwenden Sie stattdessen AssetManager.open(String)
. Dadurch erhalten Sie eine InputStream
für die Datei mytextfile.mp3
. So:
InputStream inputStream = getAssets().open("mytextfile.mp3");
BufferedReader f = new BufferedReader(new InputStreamReader(inputStream));
// ...
Bei Eclipse / ADT werden die Ressourcen gelegentlich beschädigt. Versuchen Sie, ein Projekt zu reinigen und neu zu erstellen, um zu sehen, ob es das Problem behebt
Ich hatte das gleiche Problem mit meiner App. Versuchen Sie es mit Apache Commons IOs FileUtils
.
Dies fügt Ihrer apk weitere 100kb hinzu, erleichtert jedoch die Dateibehandlung.
Wenn Sie die Datei als myfile.txt
anstelle von .mp3
speichern, erhalten Sie dann dieselbe Ausgabe?
Und haben Sie die Datei mit einem Windows- oder Linux / Unix-System erstellt? (Und mit welcher Anwendung?)
/ edit: Das funktioniert für mich:
AssetManager am = this.getAssets();
InputStream is = am.open("mytextfile.mp3");
InputStreamReader inputStreamReader = new InputStreamReader(is);
BufferedReader f = new BufferedReader(inputStreamReader);
String line = f.readLine();
while (line != null) {
// do stuff
Log.d("TAG", line);
line = f.readLine();
}