2
votes

La manière claire de valider un fichier

Je dois valider le chemin d'un fichier reçu en entrée de l'utilisateur. Mon problème est que je dois utiliser trop de "si" et à mon avis, le code semble un peu brouillon. Je sais que je peux évoquer ces affirmations conditionnelles en utilisant le modèle "chaîne de responsabilité", mais cette approche semble être un peu trop compliquée pour mon problème. Je veux dire, je ne veux pas vraiment créer une nouvelle classe pour chaque validation.

Voici mon code:

public boolean isValidFile(String filePath) {
    File file = new File(filePath);
    if(!getFileExtension(file).equals("txt")) {
        return false;
    }
    if(!file.exists()) {
        return false;
    }
    if(!file.isFile()) {
        return false;
    }
    if(file.isHidden()) {
        return false;
    }
    if(!file.canExecute()) {
        return false;
    }
    if(!file.canRead()) {
        return false;
    }

    return true;
}

Des suggestions?

p>


1 commentaires

Votre code est correct. Il est lisible et pas trop long. En règle générale, si une fonction fait moins de 20 lignes, ne vous inquiétez pas.


3 Réponses :


2
votes

Vous pouvez utiliser l'algèbre booléenne:

public boolean isValidFile(String filePath) {
  File file = new File(filePath);
  return
    getFileExtension(file).equals("txt") &&
    file.exists() &&
    file.isFile() && 
    !file.isHidden() &&
    file.canExecute() &&
    file.canRead();
}


0 commentaires

2
votes

Cela peut être basé sur une opinion, et votre fonction est assez lisible (à mon avis ...), mais d'autres options s'offrent à vous:

return (
   getFileExtension(file).equals("txt") &&
   file.exists() &&
   ...
   file.canRead());

ou

if(!getFileExtension(file).equals("txt") ||
   !file.exists() ||
   ...
   !file.canRead()) return false;

ou

if(!getFileExtension(file).equals("txt")) return false;
if(!file.exists()) return false;
...

qui peut être une manière plus directe d'écrire l'exigence d'un fichier valide.


0 commentaires

0
votes

Je pense que votre méthode est assez bonne pour ce que vous voulez réaliser.

Essayer de le rendre plus compact est possible en utilisant des opérateurs booléens (|| et &&) mais je pense que la lisibilité diminuée est bien pire que la verbosité .

La chaîne de responsabilité est totalement exagérée pour ce genre de problème à mon avis.


0 commentaires