1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

file.delete gibt false zurück

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von mblas, 06.10.2011.

  1. mblas, 06.10.2011 #1
    mblas

    mblas Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    05.10.2011
    Hi, ich hab das folgende Problem. Ich kann eine Datei einfach nicht löschen, weder über meine App mit file.delete() aber auch nicht von Hand mit dem DDMS.

    File file = ​
    new File(aktiveListe.toString());

    bool check=file.delete();

    -> liefert mir false zurück

    file.deleteOnExit(); geht auch nicht.

    Ich vermute, weil ich die Datei davor mit einem Stream gelesen hab, ist der noch irgendwie geöffnet. Aber was kann ich noch machen ausser. stream.close().

    Sourcecode zum Datei anlegen:
    FileOutputStream fOut = openFileOutput(String.valueOf("lala.txt",​
    MODE_PRIVATE);

    fOut.flush();​
    fOut.close();

    und ein ander mal:

    FileOutputStream writer = openFileOutput(​
    aktiveListe,MODE_APPEND);
    String test =
    "test";
    try{
    writer.write(test.getBytes());
    }
    catch(FileNotFoundException e){
    e.printStackTrace();
    }
    finally{
    writer.flush();
    writer.close();

    }

    und:


    FileInputStream fileIn = openFileInput(​
    aktiveListe);
    BufferedReader fileInBuffer =
    new BufferedReader(new InputStreamReader(fileIn));

    int i=0;

    //Textdatei einlesen

    try {
    while (i<54){
    buffer = fileInBuffer.readLine();
    i++;
    }
    fileInBuffer.close();

    fileIn.close();


    Die Streams sind doch alle richtig beendet oder?
    Woran kann es noch liegen, dass ich eine Datei nicht löschen kann?
     
  2. Thyrion, 06.10.2011 #2
    Thyrion

    Thyrion Ehrenmitglied

    Beiträge:
    11,845
    Erhaltene Danke:
    2,450
    Registriert seit:
    21.07.2009
    Phone:
    Nexus 5X
    Hast du mal versucht die Stream-Objekte (nach dem close()) per dispose() aus dem Speicher tilgen zu lassen?

    Alternative: Alle Referenzen auf das Stream-Objekt löschen und den Garbage-Collector starten.
     
  3. mblas, 06.10.2011 #3
    mblas

    mblas Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    05.10.2011
    Garbage Collector funktioniert nicht.
    Wie rufe ich dispose() auf sodass ich die Streams lösche?

    Liegt das überhaupt an den Streams?
     
  4. Thyrion, 06.10.2011 #4
    Thyrion

    Thyrion Ehrenmitglied

    Beiträge:
    11,845
    Erhaltene Danke:
    2,450
    Registriert seit:
    21.07.2009
    Phone:
    Nexus 5X
    Java ist zwar nicht meine Welt, aber ein ähnliches Problem hatte ich mit anderen Sprachen schon - ich vermute, dass es daran liegt.

    Und wie sieht es mit "fileIn.dispose()" aus?
     
  5. mblas, 06.10.2011 #5
    mblas

    mblas Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    05.10.2011
    Kann sein, dass ich mich gerade ziemlich dumm anstell aber die Methode gibt es nicht ... :sad:
     
  6. Thyrion, 06.10.2011 #6
    Thyrion

    Thyrion Ehrenmitglied

    Beiträge:
    11,845
    Erhaltene Danke:
    2,450
    Registriert seit:
    21.07.2009
    Phone:
    Nexus 5X
    Das ist gut möglich ;) - wie gesagt, mein Java ist komplett eingerostet :(
    Aber ich weiß, dass es möglich ist, den Destruktor manuell aufzurufen.
     
  7. mblas, 06.10.2011 #7
    mblas

    mblas Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    05.10.2011
    hmm ich finde einfach keine Lösung. :unsure:
    Ich glaube es liegt nicht an den Streams ich kann auch keine Dateien löschen die noch nie innerhalb eines Streams benutzt wurden.
    Weitere Ideen oder noch besser Lösungsvorschläge.
     
  8. mblas, 08.10.2011 #8
    mblas

    mblas Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    05.10.2011
    Ich möchte doch nur die Dateien von meinem Handy löschen.
    Gibts da keine Möglichkeiten, die einfach hart zu löschen. Ohne darauf zu achten ob die noch mit nem Stream etc. verbunden sind???
     
  9. Fr4gg0r, 10.10.2011 #9
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    f.exists()
    und Log.d("filepath", f.getPath());
    sollte helfen. ;)
     
  10. mblas, 10.10.2011 #10
    mblas

    mblas Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    05.10.2011
    gibt mir lala.txt im LogCat aus ...
    "lala.txt" ist der Name meiner Tesdatei aber löschen kann ich sie immer noch nicht ...
     
  11. Fr4gg0r, 10.10.2011 #11
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    klappt natürlich nicht, der Name muss der volle Pfad zu der Datei sein
    zb /sdcard/lala.txt
     
    mblas bedankt sich.
  12. mblas, 11.10.2011 #12
    mblas

    mblas Threadstarter Neuer Benutzer

    Beiträge:
    13
    Erhaltene Danke:
    0
    Registriert seit:
    05.10.2011
    ja ich muss den KOMPLETTEN Pfad angeben, dass war das Problem.
    Vielen Dank
    Thread kann geschlossen werden.
     
  13. RED-BARON, 08.02.2012 #13
    RED-BARON

    RED-BARON Android-Hilfe.de Mitglied

    Beiträge:
    146
    Erhaltene Danke:
    19
    Registriert seit:
    06.10.2009
    Hallo, ich habe das gleiche Problem, auch mit kompletter Pfad Angabe.

    Meine App wird über den Browser geladen und installiert. Nun kann man

    diese aus der Downloadliste löschen, auf der sdcard bleibt sie aber

    dennoch. Meine App soll nun beim Start die apk löschen. Der Code ist

    vereinfacht und soll erstmal den kompletten Download Ordner leeren.

    String state = Environment.getExternalStorageState();
    if( state.compareToIgnoreCase("mounted") == 0)

    {
    File externalStorage = Environment.getExternalStorageDirectory();


    String path = externalStorage.getAbsolutePath();

    path = path + File.separator + "download";





    File directory = new File(path);

    File[] fileList = directory.listFiles();
    if( fileList != null )

    {
    for ( int i = 0;i<fileList.length;i++)


    {

    File file = fileList;



    // Datei wird nicht gelöscht, evtl. keine Rechte ^^

    file.delete();





    }

    }

    }
    else

    {
    // "removed"


    }

    der file-member "path" enthält den Inhalt:

    "/mnt/sdcard/download/appInstaller.apk"

    die Datei ist vorhanden, wird aber nicht gelöscht.

    Der eingebaute Dateibrowser kann diese löschen.

    DDMS zeigt für die Datei: -rwxrwxr-x

    Mir fehlen demnach wohl die Rechte ! Was nun ?

    LG, RB

    EIDT:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

    Mit Angabe dieser Permission funktioniert es nun ! :)
     
    Zuletzt bearbeitet: 08.02.2012

Diese Seite empfehlen