FileNotFoundException en Java

FileNotFoundException en Java

1. introduction

Dans cet article, nous allons parler d'une exception très courante en Java: lesFileNotFoundException.

Nous couvrirons les cas où cela peut se produire, les moyens possibles de le traiter et quelques exemples.

**2. Quand l'exception est-elle levée?

Comme indiqué dans la documentation de l'API Java, cette exception peut être levée lorsque:

  • Un fichier avec le chemin d'accès spécifiédoesnot existe

  • Un fichier avec le chemin d'accès spécifiédoes existebutis inaccessible pour une raison quelconque (écriture requise pour un fichier en lecture seule, ou les autorisations ne permettent pas d'accéder au fichier)

3. Comment le gérer?

Tout d'abord, en tenant compte du fait qu'il étendjava.io.IOException qui étendjava.lang.Exception, vous devrez le traiter avec un bloctry-catch comme avec tout autre Exception vérifié.

Ensuite, ce qu'il faut faire (lié à la logique commerciale) dans le bloctry-catch dépend en fait de ce que vous devez faire.

Vous devrez peut-être:

  • Lever une exception spécifique à l'entreprise: il peut s'agir d'une erreur d'arrêt de l'exécution, mais vous laisserez la décision dans les couches supérieures de l'application (n'oubliez pas d'inclure l'exception d'origine)

  • Alertez un utilisateur avec un dialogue ou un message d'erreur: il ne s'agit pas d'une erreur d'arrêt de l'exécution, il suffit donc de notifier

  • Créer un fichier: lire un fichier de configuration facultatif, ne pas le trouver et en créer un nouveau avec des valeurs par défaut

  • Créez un fichier dans un autre chemin: vous devez écrire quelque chose et si le premier chemin n'est pas disponible, vous essayez avec un fichier sécurisé.

  • Il suffit de consigner une erreur: cette erreur ne doit pas arrêter l'exécution, mais vous enregistrez pour une analyse ultérieure.

4. Exemples

Nous allons maintenant voir quelques exemples, tous basés sur la classe de test suivante:

public class FileNotFoundExceptionTest {

    private static final Logger LOG
      = Logger.getLogger(FileNotFoundExceptionTest.class);
    private String fileName = Double.toString(Math.random());

    protected void readFailingFile() throws IOException {
        BufferedReader rd = new BufferedReader(new FileReader(new File(fileName)));
        rd.readLine();
        // no need to close file
    }

    class BusinessException extends RuntimeException {
        public BusinessException(String string, FileNotFoundException ex) {
            super(string, ex);
        }
    }
}

4.1. Journalisation de l'exception

Si vous exécutez le code suivant, il «enregistrera» l'erreur dans la console:

@Test
public void logError() throws IOException {
    try {
        readFailingFile();
    } catch (FileNotFoundException ex) {
        LOG.error("Optional file " + fileName + " was not found.", ex);
    }
}

4.2. Lever une exception spécifique à une entreprise

Ensuite, un exemple de création d'une exception spécifique à une entreprise afin que l'erreur puisse être traitée dans les couches supérieures:

@Test(expected = BusinessException.class)
public void raiseBusinessSpecificException() throws IOException {
    try {
        readFailingFile();
    } catch (FileNotFoundException ex) {
        throw new BusinessException(
          "BusinessException: necessary file was not present.", ex);
    }
}

4.3. Créer un fichier

Enfin, nous essaierons de créer le fichier pour qu'il puisse être lu (peut-être pour un thread qui lit en permanence un fichier), mais là encore, en détectant l'exception et en gérant la deuxième erreur possible:

@Test
public void createFile() throws IOException {
    try {
        readFailingFile();
    } catch (FileNotFoundException ex) {
        try {
            new File(fileName).createNewFile();
            readFailingFile();
        } catch (IOException ioe) {
            throw new RuntimeException(
              "BusinessException: even creation is not possible.", ioe);
        }
    }
}

5. Conclusion

Dans cet article rapide, nous avons vu quand unFileNotFoundException peut se produire et plusieurs options pour le gérer.

Comme toujours, les exemples complets sontover on Github.