Erst mal: ja, es gibt andere Möglichkeiten als File.delete(). Z.B. die Apache FileUtils.
Aber ich glaube nicht, dass die Dein Problem lösen. Du versuchst ja zunächst ein rename, und nur wenn das nicht klappt, läufst Du in den Zweig, der zuerst kopiert und dann löscht. Ich tippe darauf, dass die Ursache für das nicht funktionierende rename und delete identisch sind und außerhalb des geposteten Codes liegen. Ist die Quelldatei noch irgendwo anders geöffnet? Kannst Du sie über den Explorer umbenennen/löschen?
Übrigens: wieso heißt Deine Methode "kopieren", wenn sie doch umbenennt/verschiebt?
Das Umbenennen ist quasi die Ursprungs-Funktion, die nun so nicht mehr funktioniert. Diese Funktion hat bislang immer Dateien von A nach B verschoben und funktioniert wohl mit der neuen Java-Version so nicht mehr wie eingesetzt.
So sieht das jetzt aus:
public static void dateiVerschieben(File quellFile, File zielFile) // Quelle = From; Ziel = To { try { boolean b = dateiKopieren(quellFile, zielFile); if(!b) { b &= quellFile.delete(); } } catch(Exception x) { MessageVorlagen.ErrorMessage(x.toString(), null); } }
Die Quelldateien werde immer noch nicht gelöscht. Und nein: Die Dateien werden von keinem Programm oder ähnlichem verwendet, die liegen einfach so da.
Welche Java-Version ist denn für Euch die "neue"? Und ist dateiKopieren bis auf den Namen identisch mit copyMyFile? Dann würde er den Delete-Befehl nach einem erfolgreichen Kopiervorgang gar nicht mehr erreichen.
Übrigens: bitte nutze die Kommentarfunktion oder editiere Deine Frage, um auf Antworten einzugehen. Die Antworten werden nach Bewertung sortiert dargestellt, deshalb kann sehr schnell der Zusammenhang verlorengehen, wenn Du auf eine Antwort mit einer anderen Antwort reagierst.
Ok, das mit den Kommentaren und editieren hab ich noch nicht so raus, werde mich aber jetzt daran halten :)
Mit "der neuen Java Version" meine ich die, die es aktuell für MAC OS X Snow Leopard gibt.
Ich habe das if(!b) in if(b) geändert, jetzt geht das natürlich in die .delete-Funktion, löscht allerdings immer noch nicht die Quelldatei.
Ich habe die Apache FileUtils eingebaut und ich verwende zusätzlich FileUtils.deleteQuietly() und wenn das nicht true ergibt wird FileUtils.forceDelete() verwendet. Beides funktioniert nicht und forceDelete() gibt sogar eine Exception.
Steht in der Exception-Message irgendwas hilfreiches? Von Hand über den Datei-Explorer (oder wie immer das auf dem Mac heißt) kannst Du die Datei löschen, d.h. fehlende Schreibrechte oder so was kannst Du ausschließen? Besteht das Problem auch, wenn Du die Quelldatei zuvor aus dem Javacode heraus frisch anlegst (nur mal so zum Testen)?