web-dev-qa-db-fra.com

Vérifier si le fichier existe sans le créer

Si je fais ça:

File f = new File("c:\\text.txt");

if (f.exists()) {
    System.out.println("File exists");
} else {
    System.out.println("File not found!");
}

Ensuite, le fichier est créé et renvoie toujours "Le fichier existe". Est-il possible de vérifier si un fichier existe sans le créer?

MODIFIER:

J'ai oublié de mentionner que c'est dans une boucle for. Voici donc la vraie chose:

for (int i = 0; i < 10; i++) {
    File file = new File("c:\\text" + i + ".txt");
    System.out.println("New file created: " + file.getPath());
}
23
ThreaT

Lorsque vous instanciez un File, vous ne créez rien sur le disque, mais construisez simplement un objet sur lequel vous pouvez appeler certaines méthodes, comme exists().

C'est bien et pas cher, n'essayez pas d'éviter cette instanciation.

L'instance File n'a que deux champs:

private String path;
private transient int prefixLength;

Et voici le constructeur:

public File(String pathname) {
    if (pathname == null) {
        throw new NullPointerException();
    }
    this.path = fs.normalize(pathname);
    this.prefixLength = fs.prefixLength(this.path);
}

Comme vous pouvez le voir, l'instance File n'est qu'une encapsulation du chemin. Le créer afin d'appeler exists() est la bonne façon de procéder. N'essayez pas de l'optimiser.

51
Denys Séguret

La création d'une instance File ne crée pas de fichier sur le système de fichiers, donc le code publié fera ce dont vous avez besoin.

10
hmjd

À partir de Java 7 , vous pouvez utiliser Java.nio.file.Files.exists :

Path p = Paths.get("C:\\Users\\first.last");
boolean exists = Files.exists(p);
boolean notExists = Files.notExists(p);

if (exists) {
    System.out.println("File exists!");
} else if (notExists) {
    System.out.println("File doesn't exist!");
} else {
    System.out.println("File's status is unknown!");
}

Dans le tutoriel Oracle vous pouvez trouver quelques détails à ce sujet:

Les méthodes de la classe Path sont syntaxiques, ce qui signifie qu'elles opèrent sur l'instance Path. Mais vous devez finalement accéder au système de fichiers pour vérifier qu'un Path particulier existe ou n'existe pas. Vous pouvez le faire avec les méthodes exists(Path, LinkOption...) et notExists(Path, LinkOption...). Notez que !Files.exists(path) n'est pas équivalent à Files.notExists(path). Lorsque vous testez l'existence d'un fichier, trois résultats sont possibles:

  • Le fichier est vérifié pour exister.
  • Il est vérifié que le fichier n'existe pas.
  • L'état du fichier est inconnu. Ce résultat peut se produire lorsque le programme n'a pas accès au fichier.

Si exists et notExists renvoient false, l'existence du fichier ne peut pas être vérifiée.

10
ROMANIA_engineer

La méthode Files.exists a des performances sensiblement médiocres dans JDK 8 et peut ralentir considérablement une application lorsqu'elle est utilisée pour vérifier des fichiers qui n'existent pas réellement.

Cela peut également être appliqué pour Files.noExists, Files.isDirectory et Files.isRegularFile

Selon cela, vous pouvez utiliser les éléments suivants:

Paths.get("file_path").toFile().exists()
2
Kelevra