web-dev-qa-db-fra.com

Java FileOutputStream Create File s'il n'existe pas

Existe-t-il un moyen d'utiliser FileOutputStream de manière à ce que si un fichier (String filename) n'existe pas, il sera créé?

FileOutputStream oFile = new FileOutputStream("score.txt", false);
148
Stefan Dunn

Il lancera une FileNotFoundException si le fichier n'existe pas et ne peut pas être créé ( doc ), mais le créera s'il le peut. Pour être sûr, vous devriez probablement d'abord vérifier que le fichier existe avant de créer la FileOutputStream (et créer avec createNewFile() si ce n'est pas le cas):

File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing 
FileOutputStream oFile = new FileOutputStream(yourFile, false); 
244
talnicolas

Avant de créer un fichier, il est nécessaire de créer tous les répertoires du parent.

Utilisez yourFile.getParentFile().mkdirs()

28
Kostiantyn Medvid

Vous pouvez créer un fichier vide, qu'il existe ou non ...

new FileOutputStream("score.txt", false).close();

si vous voulez quitter le fichier s'il existe ...

new FileOutputStream("score.txt", true).close();

Vous n'obtiendrez une exception FileNotFoundException que si vous essayez de créer le fichier dans un répertoire qui n'existe pas. 

21
Peter Lawrey
File f = new File("Test.txt");
if(!f.exists()){
  f.createNewFile();
}else{
  System.out.println("File already exists");
}

Transmettez cette f à votre constructeur FileOutputStream.

20
Shashank Kadne

FileUtils de Apache commons est un très bon moyen de réaliser cela en une seule ligne.

FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))

Cela créera des dossiers parents s’ils n’existent pas, un fichier s’il n’existe pas et une exception si l’objet fichier est un répertoire ou ne peut pas y être écrit. Ceci est équivalent à:

File file = new File("/home/nikhil/somedir/file.txt");
file.getParentFile().mkdirs(); // Will create parent directories if not exists
file.createNewFile();
FileOutputStream s = new FileOutputStream(file,false);

Toutes les opérations ci-dessus génèrent une exception si l'utilisateur actuel n'est pas autorisé à effectuer l'opération.

12
Nikhil Sahu

Créer un fichier s'il n'existe pas. Si le fichier existe, effacez son contenu:

/**
 * Create file if not exist.
 *
 * @param path For example: "D:\foo.xml"
 */
public static void createFile(String path) {
    try {
        File file = new File(path);
        if (!file.exists()) {
            file.createNewFile();
        } else {
            FileOutputStream writer = new FileOutputStream(path);
            writer.write(("").getBytes());
            writer.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
2
foobarfuu

Il suffit de donner une autre manière de créer le fichier uniquement s'il n'existe pas en utilisant Path and Files.

Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
    Files.createFile(path);
Files.write(path, ("").getBytes());
0
Manish Bansal

new FileOutputStream(f) créera un fichier dans la plupart des cas, mais malheureusement, vous obtiendrez une exception FileNotFoundException. 

si le fichier existe mais est un répertoire plutôt qu'un fichier normal, n'existe pas mais ne peut pas être créé, ou ne peut pas être ouvert pour toute autre raison

de Javadoc

Dans d’autres cas Word, il peut y avoir de nombreux cas où FileNotFoundException signifie "Impossible de créer votre fichier", mais vous ne pouvez pas trouver la raison de l’échec de la création du fichier.

Une solution consiste à supprimer tout appel de l’API de fichier et à utiliser l’API de fichiers, car elle permet de mieux gérer les erreurs. En règle générale, remplacez new FileOutputStream(f) par Files.newOutputStream(p).

Dans les cas où vous avez besoin d'utiliser l'API de fichier (parce que vous utilisez une interface externe utilisant File par exemple), utiliser Files.createFile(p) est un bon moyen de vous assurer que votre fichier est créé correctement. Sinon, vous saurez pourquoi il n'a pas fonctionné. . Certaines personnes ont commenté plus haut que cela est redondant. C'est vrai, mais vous obtenez une meilleure gestion des erreurs qui peut être nécessaire dans certains cas.

0
stackoverflowed

Vous pouvez potentiellement obtenir une FileNotFoundException si le fichier n'existe pas.

La documentation Java dit:

Le fait qu'un fichier soit disponible ou puisse être créé dépend du fichier plate-forme sous-jacente http://docs.Oracle.com/javase/7/docs/api/Java/io/FileOutputStream.html

Si vous utilisez Java 7, vous pouvez utiliser le package Java.nio:

Le paramètre options spécifie comment le fichier est créé ou ouvert ... il ouvre le fichier en écriture, le crée s'il n'existe pas ...

http://docs.Oracle.com/javase/7/docs/api/Java/nio/file/Files.html

0
sikander