2009-08-06 8 views
3

Je veux créer un fichier texte, mais si le fichier existe déjà, il ne doit pas créer de nouveau fichier, mais doit ajouter le texte au contenu (à la fin) du fichier existant. Comment puis-je le faire en Java?vérifier fichier existe java

pour chaque seconde, je lis les données de inputstream quand j'arrête la lecture et je recommence la lecture des données à ce moment-là que je devrais écrire même fichier si le fichier existe déjà

ne je dois vérifier l'état:

if(file.exists){ 

} else{ 
    new File(); 
} 

Que dois-je faire?

+0

Votre question n'est pas claire, mais je suppose que vous voulez ajouter à un fichier si elle existe déjà, non? – Kirtan

+0

oui, vouloir ajouter à un fichier s'il existe déjà –

Répondre

12

Vous pouvez utiliser le code suivant pour ajouter à un fichier qui existe déjà -

try { 
    BufferedWriter out = new BufferedWriter(new FileWriter("filename", true)); 
    out.write("data"); 
    out.close(); 
} catch (IOException e) { } 

Si le second argument dans le constructeur FileWriter's est true, alors octets sera écrit à la fin du fichier plutôt que le début.

commentaire de citant Stephen:

... en passant true comme le 2ème argument de , le fichier à créer si elle n'existe pas et à ouvrir pour s'annexant il existe.

+2

Pour être précis, passer 'true' comme le 2ème argument fait que le fichier soit créé s'il n'existe pas et soit ouvert pour être ajouté s'il existe. –

+1

C'est la meilleure façon d'aborder ce problème. Toutes les autres méthodes check-then-create peuvent échouer en raison d'opérations de fichiers non atomiques. Sur la plupart des systèmes, l'opération append-create est atomique. La classe FileOutputStream définit directement un FileDescriptor en mode Ajout, qui est l'opération correcte. – brianegge

10

dois-je vérifier l'état if(file.exists){ }else{ new File(); }

Non, vous ne devez pas faire: voir d'autres réponses pour la solution.

En fait, ce serait une mauvaise idée de faire quelque chose comme ça, car il crée une condition de course potentielle qui pourrait rendre votre application de temps en temps mourir ... ou écraserait un fichier!

Supposons que le système d'exploitation a préempté votre application immédiatement après que l'appel file.exists() a renvoyé false et a donné le contrôle à une autre application. Supposons ensuite que l'autre application a créé le fichier. Maintenant, lorsque votre application est reprise par le système d'exploitation, il ne réalisera pas que le fichier a été créé et essaiera de le créer lui-même. Selon les circonstances, cela risque de provoquer le cliquetis du fichier existant ou de provoquer une exception IOException due à un conflit de verrouillage de fichier. Par ailleurs, new File() ne provoque pas la création d'objets système de fichiers. Cela n'arrive que lorsque vous 'ouvrez' le fichier; par exemple. en appelant new FileOutputStream(file);

1

Si vous souhaitez ajouter au fichier s'il existe déjà, il n'est pas nécessaire de vérifier son existence à l'aide de exists(). Vous avez simplement besoin de créer un FileWriter avec l'indicateur append défini sur true; par exemple.

PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("foo.txt", true))); 
pw.println("Hello, World"); 
pw.close(); 

Cela créera le fichier s'il n'existe pas ou ajouter à la fin de celui-ci sinon.

Questions connexes