Grösse einer Datei ermitteln



  • Hallo Zusammen,

    ich habe eine Problem: Ich lade per URL eine Datei (JPEG) byteweise aus dem Internet. Bei manchen dieser Dateien sieht man, dass sie leer sind (0 KB), andere wurden richtig gespeichert und haben den gewünschten Inhalt. Nun möchte ich feststellen, dass diese Dateien 0 KB haben und diese dann löschen.

    Folgendermassen habe ich es probiert:

    URL url = new URL(parmUrl);
    
    System.out.println("Lese Inhalt StrFilename : " + parmFilename + "." + parmFileType);
    strFilename = parmPath + "\\" + parmFilename + "." + parmFileType;
    System.out.println("Vor Speicherung Filename : " + strFilename);
    OutputStream out = new FileOutputStream(strFilename);
    InputStream in = url.openStream();
    int len;
    byte[] b = new byte[100];
    while ((len = in.read(b)) != -1)
    {
    	System.out.println("OJ01 : Laenge Stream : " + len );
    	out.write(b, 0, len);
    }
    out.close();
    in.close();
    ..........> JPEG gespeichert mit Laenge 0? Ja, dann löschen!!
    // Dateigrösse ermitteln
    File file = new File(strFilename);
    long longLength = file.length();
    if (longLength == 0)
    {
    	try
    	{
    		boolean rc = file.delete();	
    	}
    	catch (Exception e)
    	{
    		System.out.println("Irgendetwas falsch ...");
    	}
    
    }
    

    Offensichtlich geht mein Programm in den Zweig zum Löschen nicht hinein, weil meine Dateien eine Länge grösser als Null haben und zwar alle. Also selbst, wenn im Explorer etwas von 0 KB steht scheinen die eine von Null verschiedene Länge zu haben.

    Kann mir bitte Jemand helfen, dass wäre furchtbar nett. Vielen Dank vorab.

    Gruss

    Oliver Jägersberg 😞



  • Wenn ich beispielsweise ein Bilddatei erzeuge, so ist diese bei mir auch leer, d.h. die Länge der Datei ist 0 und ein Lesen mit FileInputStream gibt sofort -1 zurück. Folglich muss in deinen Dateien irgendetwas drinstehen. Pobiere doch Spaßes halber mit InputStream die Bytes zu lesen und anzuzeigen. Wenn der erste Wert nicht -1 ist, sind die Dateien nicht leer. Dann muss man sich was anders einfallen lassen.



  • @oj0169
    Du hast die Funktion length() falsch verstanden.
    Sie gibt nur 0L zurück, wenn die Datei nicht existiert.

    Ansonsten kann ich mir vorstellen, dass auch ein leere Datei ein paar Bytes an Inhalt hat.



  • KaraHead schrieb:

    Sie gibt nur 0L zurück, wenn die Datei nicht existiert.

    Nicht nur, was sollte sie denn sonst zurückgeben, wenn die Größe 0 ist.



  • Returns:
    The length, in bytes, of the file denoted by this abstract pathname, or 0L if the file does not exist



  • KaraHead schrieb:

    @oj0169
    Du hast die Funktion length() falsch verstanden.
    Sie gibt nur 0L zurück, wenn die Datei nicht existiert.

    Returns:
    The length, in bytes, of the file denoted by this abstract pathname, or 0L if the file does not exist

    Oder 0 wenn ... heißt nicht, dass sie nur dann 0 zurück gibt.



  • @Sie einen Benutzernamen e
    Ok Ok ich geb mich geschlagen 🙂

    @oj0169
    Ich würde es so probieren:

    if (longLength == 0 && file.exists())
    {
        try
        {
            boolean rc = file.delete();    
        }
        catch (Exception e)
        {
            System.out.println("Irgendetwas falsch ...");
        }
    
    }
    


  • @threadstarter: irgendwie kann ich mir das nicht vorstellen! File.length() funktioniert bei mir einwandfrei.

    Bei Dateien mit einer Größe von 0 Byte gibt File.length() auch 0 zurück!



  • Hallo Zusammen,

    das sind ja eine ganze Menge Antworten. Das Problem ist noch offen.
    Ich habe leider nochn keine Lösung des Problems. Ich werde die Vorschläge heute abend mal ausprobieren und mich dann noch einmal melden. An dieser Stelle aber schon einmal ein herzliches Dankeschön!

    Viele Grüsse

    Oliver


Anmelden zum Antworten