eine Datei löschen?

bassem

Grünschnabel
hallo,

ich versuche hier eine Datei ganz separat nach dem Auslesen zu löschen, es geht aber leider nicht. Ich rufe zuerst eine selbst implemetierte Methode auf die die Daten als Datenstrom ausliest, nachdem die Datei gelesen ist,versuch ich die zu löschen geht aber leider nicht
ich habe das gefühl dass die Datei aus irgendeinem Grund noch offen ist, und daher lässt sich die nicht löschen.
hier ist die Klasse:
Java:
public class ReadMessageFromFile {
    
  public int getNumLines(String path){
        
        try{
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
            int i=0;
            while(br.readLine()!=null){
                i++;
            }
            return i;
        }catch(IOException ex){
            ex.getMessage();
        }
        
        return 0;
    }
    
    public StringBuffer loadMessageAsStream(String path){
        
        try{
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
            StringBuffer outputBuffer = new StringBuffer();
            int n = getNumLines(path);
        String[] lineBuffer = new String[n];
        int nextIndex = 0;
        String zeile=null;
        
        // Alle Zeilen aus der Datei lesen 
        while ( (zeile=br.readLine()) != null ) {
            lineBuffer[nextIndex] = zeile;
            outputBuffer.append( lineBuffer[nextIndex] );
            outputBuffer.append( "\n" );
            nextIndex++;
            //nextIndex %= lineBuffer.length;
        }
    
        
        br.close(); //hier mach ich ein close()
        return outputBuffer;
        
        
        }catch(IOException ex){
            ex.getMessage();
        }
           return null;
    }
    public static void main(String[] args){
      
        ReadMessageFromFile msg = new ReadMessageFromFile();
        System.out.println(msg.loadMessageAsStream("E:/MeineTextDatei3.txt"));
        File f = new File("E:/MeineTextDatei3.txt");
        f.delete();
    }
}
 
Zuletzt bearbeitet von einem Moderator:

bassem

Grünschnabel
nein...alledings liefert die methode delete() am ende ein false zurück..aber eine Fehlermeldung kommt aber nicht
 

Anime-Otaku

Erfahrenes Mitglied
1. Benutze bitte die [ code=java ] [ /code ] bzw. [ code ] Tags

Wahrscheinlich fliegt dir die IOException um die Ohren. Da du aber mit e.getMessage() keine Ausgabe drin hast (du würdest dir damit die Fehlermeldung als String holen^^), weißt du davon nichts. Da er aber nach dem catch block dann weiter durch den Code geht, kommt er nicht zum close() Aufruf.

Daher den close besser in ein finally hinterm catch packen, damit er auf jeden Fall geschlossen wird, selbst wenn eine Exception fliegt.

Ansonsten bin ich auch gerade überfragt^^
 

bassem

Grünschnabel
da wird kein exception ausgelöst, der inhalt der Datei wird richtig ausgegeben also er kommt nicht an das catch...ich habe auch gerade mit system.out.println(ex.getmessage()) ausprobiert kommt nichts aus..d.h. es läuft richtig und kommt auf jedenfall an br.close() stelle...das find ich wirklich sehr komisch..!
 

Anime-Otaku

Erfahrenes Mitglied
hmm.....also irgendwoher muss darauf noch ein lock auf die Datei sein.

Hast du schonmal ein deleteOnExit() probiert....auch wenn das vielleicht nicht die gewollte Lösung ist.
 

zeja

Erfahrenes Mitglied
In deinem getNumLines fehlt auf jeden Fall ein close. Wozu brauchst du diese Methode überhaupt? Für mich sieht diese sehr überflüssig aus da du damit nur ein Array anlegst welches du nicht verwendest.

Aber gewöhn es dir wirklich direkt an ein close in den finally-Block zu schreiben und Exception am besten mit ex.printStackTrace() auszugeben.
 

DealeyLama

Mitglied
Hallo,

was Zeja schrieb kann sehr wohl richtig sein. Du öffnest in der Funktion, die Du benutzt, um die Anzahl der Zeilen in deiner Datei zu ermitteln, natürlich ebendiese.
Schließt sie aber nicht mehr.
Dann öffnest Du einen einen neuen FileInputStream, über den du versuchst zu lesen. Den schließt Du. Bleibt dann aber immer noch ein offener FileInputStream und ich vermute, daß genau der deine Datei blockiert. Du scheinst Dich also selbst zu blockieren.
Davon ab gehört das close() tatsächlich - wie auch andere schon anmerkten - in den finally-Block eines try...catch...finally-Konstrukts. So kannst Du sicher sein, daß im Falle eines Fehlers die Datei ordentlich geschlossen wird.

Ich hoffe, das hilft dir weiter.

Schönen Abend noch

Alexander Schell