2012-11-15 4 views
0

Je voudrais mettre à jour une partie spécifique d'un fichier texte en utilisant Java. Je voudrais être en mesure de parcourir le fichier et sélectionner des lignes spécifiques à être mis à jour, un peu comme dans une base de données, par exemple compte tenu du fichier:Java - écrasement de parties spécifiques d'un fichier

ID Value 
1 100 
2 500 
4 20 

Je souhaite insérer 3 et mettre à jour quatre, par exemple,

ID Value 
1 100 
2 500 
3 80 
4 1000 

Existe-t-il un moyen d'accomplir cette tâche (apparemment) facile? Je sais que vous pouvez ajouter à un fichier, mais je suis plus intéressé par un accès aléatoire

+3

je vais suggérer puisque personne d'autre ne :) aller de l'avant et obtenir une base de données appropriée. – Randy

Répondre

1

Je sais que vous pouvez ajouter à un fichier, mais je suis plus intéressé par un accès aléatoire

Vous essayez d'insérer et de supprimer des octets au milieu d'un fichier. Tu ne peux pas faire ça. Les systèmes de fichiers ne le supportent pas (en général). Vous pouvez remplacer octets spécifiques, mais vous ne pouvez pas les insérer ou les supprimer.

Vous pouvez mettre à jour des enregistrements spécifiques avec un accès aléatoire si vos enregistrements étaient de longueur fixe (en octets) mais il semble que ce n'est pas le cas.

Vous pouvez soit charger le fichier entier en mémoire, soit lire le fichier original, en écrivant dans un nouveau fichier avec les anciennes données ou les nouvelles données, le cas échéant, par ligne.

1

Chargez le fichier dans la mémoire, changer votre valeur, puis ré-écrire le fichier

s'il y a un moyen d'insérer dans un fichier sans le charger, je n'en ai pas entendu parler. Vous devez d'abord déplacer les autres données.

à moins que vous avez affaire à des fichiers énormes, souvent, la performance est pas trop d'une préoccupation

1

Vous pouvez le faire en utilisant des fichiers à accès aléatoire dans Java où vous pouvez placer votre position d'écriture et de lecture en cours en utilisant les méthodes disponibles. Vous pouvez explorer plus here

+1

Le problème avec cette approche est que si je veux écraser une ligne de 1 caractère avec 10 caractères, cela remplacera simplement 9 caractères de la ligne suivante – Bober02

0

Comme dit par les réponses précédentes, il n'est pas possible de faire cela symply en utilisant les flux. Vous pouvez essayer d'utiliser les propriétés, qui sont des paires de valeurs clés pouvant être enregistrées et modifiées dans un fichier texte. Par exemple, vous pouvez ajouter à un fichier une nouvelle propriété avec la commande

setProperty(String key, String value) 

Cette méthode ajoute une nouvelle propriété ou, si elle est déjà existante, modifie la valeur de la propriété avec la clé choisie.

De toute évidence, de nouvelles propriétés sont ajoutées à la fin du fichier, mais l'absence de classement n'est pas un problème pour les performances car l'accès au fichier est fait avec la méthode getProperty qui appelle la méthode Hashtable.

Voir ce tutoriel pour quelques exemples:

http://docs.oracle.com/javase/tutorial/essential/environment/properties.html

Questions connexes