Überprüfen Sie mit Java / Kotlin, ob Dateien unter Windows nicht in die Benutzerkontensteuerung geschrieben werden können

TL;DR Wenn Sie Windows unterstützen möchten, sollten Sie "java.nio.file.Files.isWritable" verwenden.

Einführung

Ü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.

So überprüfen Sie die Schreibberechtigung

Es gibt zwei Möglichkeiten, dies zu überprüfen. Der alte Weg und der relativ neue Weg.

  1. java.io.File.canWrite

  2. java.nio.file.Files.isWritable

  3. ist eine Instanzmethode der guten alten Klasse "java.io.File".

  4. 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.

das ist alles

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

Überprüfen Sie mit Java / Kotlin, ob Dateien unter Windows nicht in die Benutzerkontensteuerung geschrieben werden können
[Lösung] Java kann unter Windows 10 + ATOK 2017 nicht installiert werden
Java kann unter Ubuntu 13.04 nicht installiert werden
Beachten Sie, dass Systemeigenschaften einschließlich JAXBContext in Java11 nicht verwendet werden können
Eine Geschichte über ein in Java geschriebenes Spring Boot-Projekt, das Kotlin unterstützt
Verwenden von JupyterLab + Java mit WSL unter Windows 10
Java-Code, der nicht von Kotlin verwendet werden kann (für interne Lernsitzungen)
[Kotlin] Doppelte Dateien löschen [Java]
[Java] Szenen, die nicht neu zugewiesen werden können (im Wesentlichen endgültig)
Eine Bat-Datei, die Java in Windows verwendet
Erstellt eine Umgebung, in der Kotlin mit Docker mit CLI kompiliert und mit Java ausgeführt werden kann
Überprüfen Sie die Abdeckung mit Codecov in der Java + Gradle + Wercker-Konfiguration
Syntax- und Ausnahmebedingungen, die beim Vergleich mit null in Java verwendet werden können
Verwenden Sie Java Web Start in einer OpenJDK-Umgebung unter Windows
Vier Reihen mit Schwerkraft, die auf der Konsole gespielt werden können
Java (Super Beginner Edition), das in 180 Sekunden verstanden werden kann
Zip-Komprimierung, die in einer Java-Umgebung nicht beeinträchtigt wird