2016-05-12 2 views
0

Ich erstelle einen Bericht und versuche, ihn per E-Mail an den Benutzer zu senden. Dieser Prozess funktioniert gut für 1 Benutzer. Aber wenn ich versuche, den Bericht an mehr als einen Benutzer zu senden, muss ich den Bericht neu generieren und dafür muss ich den vorherigen Bericht löschen, der auf dem Server gespeichert ist. Also verwende ich folgenden Code.dateiname.delete() gibt false in JAVA

if(newFileName.exists()){ 
    System.out.println("file delete: "+newFileName.delete()); 
} 

Aber es gibt mir falsch. Daher erhält der zweite Benutzer denselben Bericht wie der erste Benutzer. Ich habe viele Lösungen gesucht; aber alle sind gescheitert. Kann mir bitte jemand helfen?

+0

Haben Sie versucht, den absoluten Pfad zuerst der Datei (getAbsolutePath()) zu bekommen? Und schließen Sie() den offenen FileInputStream? –

+0

Sie müssen diese API nicht unbedingt verwenden. Erstellen Sie einfach einen neuen 'FileOutputStream' oder' FileWriter' oder 'PrintWriter'. Wenn es nicht geöffnet werden kann, wird es Ihnen sagen, und mit einer informativen Ausnahme, nicht nur ein boolean. – EJP

Antwort

1

Ich bin mir ziemlich sicher, dass Sie Ihre Datei nicht löschen können, weil die Datei noch in Ihrem Prozess verwendet wird ... Überprüfen Sie, ob mit dieser Datei noch ein Stream geöffnet ist.

Oder vielleicht haben Sie nicht genug Berechtigungen zum Löschen von Dateien auf dem Server. Überprüfen Sie dies auch.

Try Path Objekt zu verwenden und diese um mehr Informationen zu haben, verwenden warum Sie ein Problem haben: (Java 7 und höher)

try { 
    Files.delete(newFileName.toPath()); 
} catch (NoSuchFileException x) { 
    System.err.format("%s: no such" + " file or directory%n", path); 
} catch (DirectoryNotEmptyException x) { 
    System.err.format("%s not empty%n", path); 
} catch (IOException x) { 
    // File permission problems are caught here. 
    System.err.println(x); 
} 

-Code von hier: https://docs.oracle.com/javase/tutorial/essential/io/delete.html

Vielleicht ist die beste Lösung um Dateien mit unterschiedlichen Namen zu erzeugen?

+0

Eigentlich muss ich eine Datei mit demselben Namen, aber mit unterschiedlichem Inhalt senden. Lassen Sie mich überprüfen, ob ein Stream geöffnet ist oder nicht. –

+0

Es hat funktioniert! Danke Guillaume. Ich habe ** InputStream ** verwendet, um die Datei auf dem Server hochzuladen; aber ich habe vergessen, es zu schließen. –

+0

Perfekt !!! Vergiss nicht zu wählen :) – Guillaume