Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Nur die letzen 128Byte von einem File lessen

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.05.2004
    Beiträge
    49

    Nur die letzen 128Byte von einem File lessen

    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

  2. #2
    Registrierter Benutzer Avatar von Boron
    Registriert seit
    07.01.2002
    Beiträge
    827
    Wenn du die "Länge" des FileReader-Streams irgendwie feststellen kannst, dann könnte Folgendes funktionieren:
    Code:
    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.
    Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)

    LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
    Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.05.2004
    Beiträge
    49
    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

  4. #4
    Registrierter Benutzer Avatar von ExRevel
    Registriert seit
    08.11.2004
    Ort
    Stuttgart
    Beiträge
    33
    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
    The CodeWars Project (Coding Contest for AI Buffs)

  5. #5
    Registrierter Benutzer
    Registriert seit
    08.05.2004
    Beiträge
    49
    Hi,

    also ich habe es schon mit "char[] tag = new char[130];" versucht selber Fehler ;(.


    danke dir pfeffer

  6. #6
    Registrierter Benutzer
    Registriert seit
    08.05.2004
    Beiträge
    49
    hi,

    habe es geloest danke!

    gruesse pfefferkeks

  7. #7
    Registrierter Benutzer
    Registriert seit
    26.10.2004
    Ort
    Beijing
    Beiträge
    31

    und wie nun.. ?

    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

  8. #8
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Eventuell wäre auch was mit NIO (Memory Mapped Files) noch recht effizient.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  9. #9
    Registrierter Benutzer
    Registriert seit
    13.12.2004
    Beiträge
    15
    Wenn ich nicht daneben liege, muss man folgedes machen:

    Code:
    in.read(tag, size, size+128);
    Liebe Grüße
    Reality

  10. #10
    Registrierter Benutzer
    Registriert seit
    08.05.2004
    Beiträge
    49
    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •