| 

.NET C# Java Javascript Exception

2
Gibt es eine andere Funktion als
file.delete()

um unter Java eine Datei zu löschen?

Wenn ich
boolean b = file.delete();

ausführe, bekomme ich ein FALSE zurück.

Deshalb ist meine Frage, gibt es eine andere Möglichkeit um Daten zu löschen?

Hier möchte ich gerne den kompletten Quellcode offen legen

Die "Verschieb"-Funktion, die ich nutze:
public static void dateiVerschieben(File quellFile, File zielFile)
{
try
{
boolean b = dateiKopieren(quellFile, zielFile);
if(b)
{
b &= quellFile.delete();
}
}
catch(Exception x)
{
MessageVorlagen.ErrorMessage(x.toString(), null);
}
}


Für den eigentlichen Kopiervorgang:
public static boolean dateiKopieren(File source, File dest){
try{
java.io.FileInputStream sourceFile = new java.io.FileInputStream(source);

try{
java.io.FileOutputStream destinationFile = null;

try{
destinationFile = new FileOutputStream(dest);
byte buffer[] = new byte[512 * 1024];
int reading;

while ((reading = sourceFile.read(buffer)) != -1){
destinationFile.write(buffer, 0, reading);
}
} finally {
destinationFile.close();
}
} finally {
sourceFile.close();
}
} catch (IOException e){
e.printStackTrace();
return false;
}
return true;
}


An der stelle
System.out.println(b);

Erhalte ich immer ein FALSE.
31.08.2011
Bibo1987 180 7
3 Antworten
2
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?
31.08.2011
Matthias Hlawatsch 12,8k 3 9
Mit der Apache FileUtils Library ist meine Frage beantwortet, da es eine andere Methode ist, um Daten zu löschen
Bibo1987 01.09.2011
1
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.
31.08.2011
Bibo1987 180 7
2
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.
Matthias Hlawatsch 31.08.2011
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.
Bibo1987 31.08.2011
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)?
Matthias Hlawatsch 31.08.2011
0
Hilfts was, am Ende des try Blocks noch ein "return true;" einzufügen? bevor der catch-Block kommt?
31.08.2011
AlexanderF 185 6

Stelle deine Java-Frage jetzt!