Nur die letzten 128 Byte einer Datei lessen

Hi,

ich versuche folgendes:
/**
* The methode reads the IDv1 tag from the given data file.
* Than the IDv1 tag will be written out at the console.
*
* @param data : String to the data file (mp3 file)
* @return String with the Tag
* @throws IOException if String hasn’t a correct mp3 file.
*/
public void printMp3Tag(String data) throws IOException{
if (data.endsWith(„mp3“)) {
File file = new File(data);
FileReader in = new FileReader(data);
char[] tag = new char[130];
long length=0;

length = file.length();
int size = (int) (length-128);
in.read(tag, size, 128);

in.close();
}

nur leider bekomme ich immer:
java.lang.IndexOutOfBoundsException

Ich weiss nur leider nicht warum. Das Array ist gross genug.

Danke pfeffer

Auch hallo.

Ich glaube in dem Code geht etwas Prinzipielles schief: http://arachne.uni-muenster.de:8000/num/Vorlesungen/…
(suche nach ‚FileReader‘). [[Filereader liest nämlich die einzelnen Zeichen einer x-beliebigen Datei und nicht deren Namen.]] Ausserdem sollte es bessere Mittel geben um den ID-Tag einer mp3-Datei auszugeben :wink:
Oder das Tag versteckt sich irgendwo in der mp3-Datei, wird aber wg. der fehlenden Arraygrösse nicht entdeckt…

HTH
mfg M.L.

ps: Entschuldigung für evtl. Irrtümer…

Danke an alle die darueber nachgedacht haben´.

Ich habe es geloest :wink:

Hallo Pfefferkeks,

Du versuchst mit einem Reader einen binären Stream zu lesen. Dass kann nur schief gehen, da (i.d.R.) die Anzahl der Bytes != Anzahl der Chars ist (denk an UTF-8 Kodierung der Zeichen, …). Daher die IndexOutOfBoundsException.

Was Du möchtest ist ein FileInputStream. Dieser liest Bytes (siehe http://java.sun.com/j2se/1.4.2/docs/api/index.html)

Gruß,
Frank

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]