Vérifiez avec Java / Kotlin que les fichiers ne peuvent pas être écrits en UAC sous Windows

TL;DR Si vous souhaitez prendre en charge Windows, vous devez utiliser java.nio.file.Files.isWritable.

introduction

Je ne connaissais rien à Internet, alors j'ai écrit une note pour moi-même.

Il est destiné au processus d'enregistrement de fichiers dans Java / Kotlin, en particulier au processus permettant à l'utilisateur de sélectionner un répertoire et de le sauvegarder.

Je parle de classes Java, mais comme j'ai fait Kotlin, l'exemple de source suit cela.

Comment vérifier l'autorisation d'écriture

Il existe deux façons de vérifier. L'ancienne méthode et la méthode relativement nouvelle.

  1. java.io.File.canWrite

  2. java.nio.file.Files.isWritable

  3. est une méthode d'instance de la bonne vieille classe java.io.File.

  4. est une méthode statique de classe relativement nouvelle ajoutée dans Java 1.7 appelée java.nio.file.Files. En premier lieu, la classe java.nio.file.Files ne gère que les méthodes statiques.

On dit qu'il est plus sûr d'utiliser 2. pour Windows. J'expliquerai les détails ci-dessous.

java.io.File.canWrite Encore une fois, c'est une méthode d'instance.

Voici un exemple.

sample.kt


val file = File("Chemin de fichier arbitraire")
val canWrite = file.canWrite() //Vrai si inscriptible

Très facile.

Cela ne regarde que si le fichier a l'attribut accessible en écriture. Pour Linux, les autorisations dites Linux, et pour Windows, l'attribut en lecture seule des propriétés de fichier.

En d'autres termes, il n'est pas possible de vérifier si le processus Java en cours d'exécution a autorité sur le système d'exploitation. Plus spécifiquement, il ne prend pas en charge la vérification des autorisations Windows UAC. ** **

Par conséquent, si le répertoire ne peut pas être écrit sans les privilèges d'administrateur du système d'exploitation, comme directement sous le lecteur C, même si canWrite est vrai, ʻIOException` sera lancée sans pitié lors de l'écriture du fichier, ce qui est un échec (processus Java). Bien sûr, ce n'est pas le cas si fonctionne avec des privilèges d'administrateur)

java.nio.file.Files.isWritable C'est là que cette méthode entre en jeu. Comment écrire est comme ça.

sample.kt


val file = File("Chemin de fichier arbitraire")
val canWrite = Files.isWritable(file.toPath()) //Vrai si inscriptible

Cela vérifiera si le processus Java dispose d'autorisations en écriture, y compris **. Ce qui suit est une citation de la documentation Oracle JDK. https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Files.html#isWritable-java.nio.file.Path-

Cette méthode vérifie que le fichier existe et ** cette machine virtuelle Java dispose des privilèges appropriés pour permettre l'ouverture du fichier en écriture **.

Donc, ici, vous pouvez vérifier y compris UAC. Par ailleurs, les autorisations de lecture et d'exécution peuvent être vérifiées de la même manière avec des méthodes telles que ʻisReadable et ʻisExecutable.

c'est tout

D'après ce que j'ai vérifié, il n'y avait que des articles liés à l'UAC qui ont été perturbés par le programme d'installation à l'époque de Vista, et il n'y avait vraiment aucune information autre que la référence Oracle. N'est-il pas coincé ici de manière inattendue? Ou y a-t-il un petit nombre de cas d'applications natives en premier lieu? ??

J'espère que cela aide les gens qui sont coincés dans le même événement.

Recommended Posts

Vérifiez avec Java / Kotlin que les fichiers ne peuvent pas être écrits en UAC sous Windows
[Solution] Java ne peut pas être installé sur Windows 10 + ATOK 2017
Impossible d'installer Java sur Ubuntu 13.04
Notez que les propriétés système, y compris JAXBContext, ne peuvent pas être utilisées dans Java11
Une histoire sur un projet Spring Boot écrit en Java qui prend en charge Kotlin
Utilisation de JupyterLab + Java avec WSL sous Windows 10
Code Java qui ne peut pas être utilisé depuis Kotlin (pour les sessions d'étude en interne)
[Kotlin] Supprimer les fichiers en double [Java]
[Java] Scènes qui ne peuvent pas être réaffectées (essentiellement définitives)
Un fichier bat qui utilise Java dans Windows
Création d'un environnement où kotlin peut être compilé avec cli avec docker et exécuté avec java
Vérifiez la couverture avec Codecov dans la configuration Java + Gradle + Wercker
Syntaxe et conditions d'occurrence d'exception pouvant être utilisées lors de la comparaison avec null en Java
Utiliser Java Web Start dans un environnement OpenJDK sous Windows
Quatre rangées avec gravité pouvant être jouées sur la console
Java (édition super débutante) compréhensible en 180 secondes
Compression Zip qui ne brouille pas dans l'environnement Java