TL;DR Wenn Sie Windows unterstützen möchten, sollten Sie "java.nio.file.Files.isWritable" verwenden.
Überraschenderweise wusste ich nichts über das Internet und schrieb mir ein Memo.
Es ist für den Prozess des Speicherns von Dateien in Java / Kotlin vorgesehen, insbesondere für den Prozess, bei dem der Benutzer ein Verzeichnis auswählen und speichern kann.
Ich spreche von Java-Klassen, aber da ich tatsächlich Kotlin gemacht habe, folgt die Beispielquelle dem.
Es gibt zwei Möglichkeiten, dies zu überprüfen. Der alte Weg und der relativ neue Weg.
java.io.File.canWrite
java.nio.file.Files.isWritable
ist eine Instanzmethode der guten alten Klasse "java.io.File".
ist eine relativ neue statische Klassenmethode, die in Java 1.7 hinzugefügt wurde und "java.nio.file.Files" heißt. Erstens behandelt die Klasse "java.nio.file.Files" nur statische Methoden.
Es wird gesagt, dass es sicherer ist, 2. für Windows zu verwenden. Ich werde die Details unten erklären.
java.io.File.canWrite Auch dies ist eine Instanzmethode.
Unten ist ein Beispiel.
sample.kt
val file = File("Beliebiger Dateipfad")
val canWrite = file.canWrite() //Richtig, wenn beschreibbar
Sehr leicht.
Dies sieht nur so aus, wenn die Datei das beschreibbare Attribut hat. Für Linux sogenannte Linux-Berechtigungen und für Windows das schreibgeschützte Attribut der Dateieigenschaften.
Mit anderen Worten, es ist nicht möglich zu überprüfen, ob der ausgeführte Java-Prozess die Autorität über das Betriebssystem hat. Insbesondere wird die Windows-UAC-Berechtigungsprüfung nicht unterstützt. ** **.
Wenn das Verzeichnis nicht ohne Administratorrechte des Betriebssystems geschrieben werden kann, z. B. direkt unter dem Laufwerk C, wird "IOException" beim Schreiben der Datei gnadenlos ausgelöst, was ein Fehler ist (Java-Prozess). Dies ist natürlich nicht der Fall, wenn es mit Administratorrechten ausgeführt wird.
java.nio.file.Files.isWritable Hier kommt diese Methode ins Spiel. Wie man schreibt ist so.
sample.kt
val file = File("Beliebiger Dateipfad")
val canWrite = Files.isWritable(file.toPath()) //Richtig, wenn beschreibbar
Dadurch wird überprüft, ob der Java-Prozess über beschreibbare Berechtigungen verfügt, einschließlich **. Das Folgende ist ein Zitat aus der Oracle JDK-Dokumentation. https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Files.html#isWritable-java.nio.file.Path-
Diese Methode überprüft, ob die Datei vorhanden ist und ** diese virtuelle Java-Maschine über die entsprechenden Berechtigungen verfügt, damit die Datei zum Schreiben geöffnet werden kann **.
Hier können Sie also die Benutzerkontensteuerung überprüfen. Übrigens können Lese- und Ausführungsberechtigungen auf dieselbe Weise mit Methoden wie "isReadable" und "isExecutable" überprüft werden.
Soweit ich das überprüft habe, gab es nur Artikel im Zusammenhang mit der Benutzerkontensteuerung, die vom Installationsprogramm in der Vista-Ära gestört wurden, und es gab wirklich keine anderen Informationen als die Oracle-Referenz. Steckt es nicht unerwartet hier fest? Oder gibt es überhaupt nur wenige Fälle von nativen Apps? ??
Ich hoffe, es hilft Menschen, die im selben Ereignis stecken.
Recommended Posts