52 votes

Comment vérifier les droits d'écriture d'un répertoire en Java ?

Je voudrais un extrait de code qui vérifie si un répertoire a les permissions de lecture/écriture et fait quelque chose si c'est le cas, et fait quelque chose d'autre si ce n'est pas le cas. J'ai essayé un exemple montré ici :

try {
    AccessController.checkPermission(new FilePermission("/tmp/*", "read,write"));
System.out.println("Good");
    // Has permission
} catch (SecurityException e) {
    // Does not have permission
System.out.println("Bad");
}

Le problème est que l'exception est toujours déclenchée, ce qui fait qu'il finit toujours par imprimer "Bad", que le répertoire ait des droits d'écriture ou non. (Je chmod les répertoires à 777 ou 000 pour tester).

Existe-t-il une alternative ou un moyen de réaliser ce dont j'ai besoin ?

0voto

ninja Points 796

Voulez-vous vérifier les autorisations pour dossier ou pour fichiers dans le dossier ?

"/*" dans le nom du chemin d'accès signifie un répertoire et tous les fichiers contenus dans ce répertoire.

voir javadoc

0voto

asgs Points 2083

java.io.File a deux méthodes canRead y canWrite cela devrait suffire.

0voto

Vijay Patidar Points 321
if(DocumentFile.fromFile(file).canWrite()){
   //allowed
   ...
}else{
   ...
}

0voto

user15423321 Points 61

Sous Windows, File.canWrite() ne fournit pas toujours un résultat précis. Je recommanderais d'utiliser ce qui suit :

import java.nio.file.Files;
import java.nio.file.Paths;
...

if(Files.isWritable(Paths.get("path"))){
  //ok, write
}

0voto

BodaWale Points 11

Oups, encore une chose. Le répertoire doit également être exécutable, du moins sous Linux :

  /** Make sure output dir exists and is writeable. */
  public boolean validateOutputDir(Path publishDirectory, Formatter error) {
    if (!Files.exists(publishDirectory)) {
      error.format(" Output directory '%s' does not exist%n", publishDirectory);
      return false;
    }
    if (!Files.isDirectory(publishDirectory)) {
      error.format(" Output directory '%s' is not a directory%n", publishDirectory);
      return false;
    }
    if (!Files.isWritable(publishDirectory)) {
      error.format(" Output directory '%s' is not writeable%n", publishDirectory);
      return false;
    }
    if (!Files.isExecutable(publishDirectory)) {
      error.format(" Output directory '%s' is not executable%n", publishDirectory);
      return false;
    }
    return true;
  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X