2017-12-20 13 views
0

Warum kann ich eine Datei in meinem Java-Code löschen, obwohl der Tomcat-Benutzer nicht über die Löschberechtigung verfügt?Kann eine Datei ohne Berechtigungen löschen

Mein Server wird den folgenden Code ausgeführt wird, die eine Datei löscht und neu erstellt, wenn es vorhanden ist:

File fileCSV = new File(filePath); 
    try { 
     if (fileCSV.exists()) { 
      fileCSV.delete(); 
     } 
     fileCSV.createNewFile(); 
    } catch (IOException ex) { 
     throw new FooImportException("Error creating new file"); 
    } 

Es ist in der Lage, die Datei trotz des Benutzers durch den Server Löschen Berechtigungen nicht verwendet löschen zu müssen - nur Lese- und Schreibrechte.

enter image description here

Ich bin sicher, dass diese die entsprechenden Berechtigungen sind, wie der Code auf der Linie Dateierstellung fehlschlägt, ohne dass die „Dateien erstellen/Daten schreiben“ Berechtigungen. schlägt jedoch in der Löschzeile fehl, wenn die Berechtigung "Löschen" fehlt. Was könnte der Grund dafür sein?

+0

Sie müssen gehen Lesen Sie die JavaDocs und sehen Sie, was es zu 'File # delete' sagt. 'delete' wirft keine Ausnahme, es gibt einen' boolean' zurück, der den Erfolg der Operation angibt – MadProgrammer

+0

@MadProgrammer Interessant! Ich hätte das nicht einmal in Erwägung gezogen. Das klingt einer vollwertigen Antwort würdig. –

+0

Ich bin mir ziemlich sicher, dass es vor – MadProgrammer

Antwort

1

der JavaDocs for File#delete

Nach

public boolean delete()
Löscht die Datei oder das Verzeichnis von diese abstrakte Pfadname bezeichnet. Wenn dieser Pfadname ein Verzeichnis angibt, muss das Verzeichnis leer sein, um gelöscht zu werden.

Beachten Sie, dass die Files Klasse die delete Methode definiert, um eine IOException zu werfen, wenn eine Datei nicht gelöscht werden kann. Dies ist nützlich für die Fehlerberichterstattung und zur Diagnose , warum eine Datei nicht gelöscht werden kann.

Rückgabe:
true wenn und nur wenn die Datei oder das Verzeichnis erfolgreich gelöscht wurde; false sonst
Wirft:
SecurityException - Wenn ein Sicherheitsmanager existiert und seine SecurityManager.checkDelete(java.lang.String) Verfahren verweigert Zugang zum

So

Datei löschen, wird File#delete nicht eigentlich eine Exception werfen, wenn die Datei nicht gelöscht werden kann, aber gibt stattdessen eine boolean basierend auf dem Erfolg der Operation zurück. Wenn die Exception für Sie wichtig ist, sollten Sie stattdessen Files#delete verwenden.

Es ist wichtig zu beachten - das löst nur die Frage nach dem „Warum scheitert es nicht“ auf dem verfügbaren Code basiert, nicht die Frage der „wäre es nicht“ auf der Grundlage der verfügbaren Dateiberechtigungen

Verwandte Themen