2015-07-24 6 views
1

Je cours un programme qui lit les informations d'un fichier spécifique. Si, pendant l'exécution du programme, je modifie le contenu de ce fichier ou le supprime, le programme ne fonctionnera-t-il pas correctement? Sur une note similaire, j'ai un programme qui crée un fichier dans mon espace de travail. Si j'exécute ce programme et que je l'exécute à nouveau avec des paramètres différents pendant la première exécution, le fichier en cours de création sera-t-il remplacé et écrasé?Modifier les fichiers lors de l'exécution du programme Java dans Eclipse

+0

Un fichier est "lu" à un moment donné par votre programme. Si vous supprimez le fichier avant cela, vous obtiendrez une erreur "open" et/ou une exception "read". Si vous changez le fichier après cela, votre programme sera désynchronisé avec le contenu actuel du fichier. Comme la plupart des E/S sont mises en mémoire tampon, il peut y avoir une superposition entre le moment où votre programme initie le "read()" et le moment où le "read I/O" se produit réellement. BOTTOM LINE: Si vous pensez qu'un programme doit être synchronisé avec le contenu actuel du fichier, vous devez ["lock"] (http://www.studytrails.com/java-io/file-locking.jsp) fichier. – paulsm4

+0

Bienvenue sur Stackoverflow! –

Répondre

1

Dépend de comment vous lisez le contenu et le système d'exploitation lui-même. Habituellement, il y a un tampon de lecture, ce tampon est rempli en utilisant le contenu actuel du fichier réellement servi par le système d'exploitation. Si vous supprimez le fichier pendant la lecture, il y aura habituellement un IOException. Pour être relativement sûr que personne d'autre ne modifie le contenu (ou ne supprime le fichier) pendant que vous lisez le fichier, vous pouvez utiliser un file-lock en Java.

La deuxième question dépend de la synchronisation, un flux ou un lecteur aura un curseur à la position à l'intérieur du fichier. Si le deuxième programme remplace avec succès le fichier le premier programme ouvert mais est plus petit que le curseur du premier programme, il y aura une exception IOException sur la prochaine commande read du premier programme car le curseur est en fait hors de la plage .