Archiv verlassen und diese Seite im Standarddesign anzeigen : Nur die letzen 128Byte von einem File lessen
pfefferkeks
20-12-2004, 15:42
Hi,
ich habe mir folgende Methode gebuat:
/**
* 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")) {
FileReader in = new FileReader(data);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
int i=0, tag=0;
while ((i = in.read()) != -1) {
out.write(i);
}
in.close();
out.flush();
}
else {
throw new IOException();
}
}
}
wie schaffe ich es das nur die letzten 128 Byte von dem File gelessen werden?
danke pfefferkeks
Wenn du die "Länge" des FileReader-Streams irgendwie feststellen kannst, dann könnte Folgendes funktionieren:
char trailer[128];
in.read( trailer, size-128, 128);Wie du allerdings die Länge des Stream bestimmen kannst weiß ich auch nicht.
Da es sich ja um eine Datei handelt, durfte es sich ja um die Größe der Datei handeln.
pfefferkeks
20-12-2004, 17:53
File file = new File(data);
FileReader in = new FileReader(data);
char[] tag = new char[128];
long length=0;
length = file.length();
int size = (int) (length-128);
in.read(tag, size, 128);
Das habe ich eben geschrieben und ich bekomme immer ein:
java.lang.IndexOutOfBoundsException
auf
in.read(tag, size, 128);
wer weiss warum? das array ist doch gross genug oder?
danke pfeffer
Ich weiss nun nicht zu 100% wie es in Java ist, aber mach das Array doch mal ein Byte größer, ich meine in C z.B. gibt es ja auch noch ein Terminierungsbyte.
ciao Exi
pfefferkeks
20-12-2004, 18:03
Hi,
also ich habe es schon mit "char[] tag = new char[130];" versucht selber Fehler ;(.
danke dir pfeffer
pfefferkeks
20-12-2004, 21:13
hi,
habe es geloest danke!
gruesse pfefferkeks
hi
gratuliere.
vergiss aber nicht dass jeder fehler max. einmal gemacht werden sollte.
da das sicher nicht erreichbar ist sollten wir doch versuchen wenigstens so nah dran zu kommen wie moeglich.
also denk an die die den thread irgendwann ergooglen werden und dann gern sehen wuerden wie man das problem denn nun loest! haben wir ja alle was von.
gruss marius
peschmae
22-12-2004, 07:37
Eventuell wäre auch was mit NIO (Memory Mapped Files) noch recht effizient.
MfG Peschmä
Wenn ich nicht daneben liege, muss man folgedes machen:
in.read(tag, size, size+128);
Liebe Grüße
Reality
pfefferkeks
31-12-2004, 14:08
Meine Loesung:
/**
* The methode reads the IDv1 tag from the given data file.
*
* @param data : String to the data file (mp3 file)
* @return String[] : The Array includes 5 Strings with the ID3 tag.
* @throws IOException if String data hasn't a correct mp3 file.
*
* written from Swen Walkowski 2004
*/
public String[] printMp3Tag(String data) throws IOException{
if (data.endsWith("mp3")) {
File file = new File(data);
FileReader in = new FileReader(data);
char[] tag = new char[125];
long length=0;
int i=0;
String[] strReturn = new String[5];
String strTitle="", strArtist="", strAlbum="";
String strYear="", strComment="";
//finde the right place of the ID3 tag
length = file.length();
in.skip(length-125);
in.read(tag, 0, 125);
in.close();
//build the strings with the tag
if (0 != tag[0]) {
for (i=0; i<30; i++) {
if (0 != tag[i]) {
strTitle = strTitle + tag[i];
}
}
}
if (0 != tag[30]) {
for (i=30; i<60; i++) {
if (0 != tag[i]) {
strArtist = strArtist + tag[i];
}
}
}
if (0 != tag[60]) {
for (i=60; i<90; i++) {
if (0 != tag[i]) {
strAlbum = strAlbum + tag[i];
}
}
}
if (0 != tag[90]) {
for (i=90; i<94; i++) {
if (0 != tag[i]) {
strYear = strYear + tag[i];
}
}
}
if (0 != tag[94]) {
for (i=94; i<124; i++) {
if (0 != tag[i]) {
strComment = strComment + tag[i];
}
}
}
//Fillup the String[] with the correct strings
strReturn[0] = strTitle;
strReturn[1] = strArtist;
strReturn[2] = strAlbum;
strReturn[3] = strYear;
strReturn[4] = strComment;
return strReturn;
}
else {
throw new IOException();
}
} //end printMp3File
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.