Gestion du fichier en java
Résolu
sagon
-
Martin -
Martin -
Bonjour,
comment peut on écrire au milieu d'un fichier avec java
merci d'avance
comment peut on écrire au milieu d'un fichier avec java
merci d'avance
A voir également:
- Gestion du fichier en java
- Fichier bin - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Fichier epub - Guide
- Fichier rar - Guide
4 réponses
Je ne connaissais pas le terme de SEd, mais si c'est ça, il va falloir charger le texte dans une Collection, peut-être ArrayList<String>, faire les opérations dessus puis écraser le texte.
En tout cas je ne connais pas, en Java, de flux qui permettent en même temps la lecture (InputSream) et l'écriture (OutputStream)
En tout cas je ne connais pas, en Java, de flux qui permettent en même temps la lecture (InputSream) et l'écriture (OutputStream)
Bonjour,
Je reprends doucement la programmation et tombe un peu sur la même interrogation pour gérer/compléter un fichier sans l'écraser systématiquement.
J'ai fait un petit programme qui recense mes demandes de stage (trois champs string genre nom_de_la_boite, activité, et informations_diverses) et me permet de les reconsulter ultérieurement.
Pour commencer doucement, j'ai choisit d'écrire chaque entrée dans un fichier texte en trois lignes (une pour chaque champ).
Dans ma procédure pour enregistrer une nouvelle entrée j'ai donc le problème de compléter un fichier existant et j'utilise un tableau auxiliaire type String[] pour sauvegarder ce qui est deja ecrit sur le fichier car mes autres tentatives de lire et écrire en même temps sont vouées à l'échec puisque le fichier recréé écrase systématiquement (new filereader (meme nom de fichier) l'ancien et son contenu.
public void enreg_entree() {
String chaine1;
String chaine2;
String chaine3;
String[] aux = new String[100];
int i=0;
chaine1= textField1.getText();
chaine2=jTextField1.getText();
chaine3=jTextField2.getText();
try {
JFileChooser choix = new JFileChooser(); // Boite de dialogue pour sélectionner le fichier à completer
choix.showOpenDialog(new JFrame());
FileReader fichier_existant = new FileReader (choix.getSelectedFile());
lit_fichier_existant(fichier_existant, aux); // Lit le fichier à completer et enregistre chaque ligne dans un String[]
BufferedWriter fic = new BufferedWriter(new FileWriter(choix.getSelectedFile())); // Crée le "même" fichier
while (aux[i]!=null) {
fic.write(aux[i]); // Ecriture des lignes sauvegardées dans le String[]
fic.newLine();
i++;
}
fic.write(chaine1); // Ecrit la éléments nouvelle entrée
fic.newLine();
fic.write(chaine2);
fic.newLine();
fic.write(chaine3);
fic.close();
}
catch (java.io.IOException exep) {
System.out.println("erreur"+ exep);
}}
Ca fonctionne mais je ne suis pas sur que ce soit la meilleure façon de procéder.
Y'a-t-il une astuce pour "parer le sens unique" du stream ?
D'autant que en lecture du coup, on ne peut pas créer le fichier en tapant un nom de fichier inexistant dans la dialogue box, si ?
Aussi, est-il possible de ne pas spécifier la longueur du String[], il me semble que c'était possible en Pascal (c'est avec ca que j'avais fait mes bases) ?
Ne tiquez pas trop sur la syntaxe, notamment le gros bloque try/catch qui englobe tout !
D'avance, merci pour vos réponse !
Martin
Je reprends doucement la programmation et tombe un peu sur la même interrogation pour gérer/compléter un fichier sans l'écraser systématiquement.
J'ai fait un petit programme qui recense mes demandes de stage (trois champs string genre nom_de_la_boite, activité, et informations_diverses) et me permet de les reconsulter ultérieurement.
Pour commencer doucement, j'ai choisit d'écrire chaque entrée dans un fichier texte en trois lignes (une pour chaque champ).
Dans ma procédure pour enregistrer une nouvelle entrée j'ai donc le problème de compléter un fichier existant et j'utilise un tableau auxiliaire type String[] pour sauvegarder ce qui est deja ecrit sur le fichier car mes autres tentatives de lire et écrire en même temps sont vouées à l'échec puisque le fichier recréé écrase systématiquement (new filereader (meme nom de fichier) l'ancien et son contenu.
public void enreg_entree() {
String chaine1;
String chaine2;
String chaine3;
String[] aux = new String[100];
int i=0;
chaine1= textField1.getText();
chaine2=jTextField1.getText();
chaine3=jTextField2.getText();
try {
JFileChooser choix = new JFileChooser(); // Boite de dialogue pour sélectionner le fichier à completer
choix.showOpenDialog(new JFrame());
FileReader fichier_existant = new FileReader (choix.getSelectedFile());
lit_fichier_existant(fichier_existant, aux); // Lit le fichier à completer et enregistre chaque ligne dans un String[]
BufferedWriter fic = new BufferedWriter(new FileWriter(choix.getSelectedFile())); // Crée le "même" fichier
while (aux[i]!=null) {
fic.write(aux[i]); // Ecriture des lignes sauvegardées dans le String[]
fic.newLine();
i++;
}
fic.write(chaine1); // Ecrit la éléments nouvelle entrée
fic.newLine();
fic.write(chaine2);
fic.newLine();
fic.write(chaine3);
fic.close();
}
catch (java.io.IOException exep) {
System.out.println("erreur"+ exep);
}}
Ca fonctionne mais je ne suis pas sur que ce soit la meilleure façon de procéder.
Y'a-t-il une astuce pour "parer le sens unique" du stream ?
D'autant que en lecture du coup, on ne peut pas créer le fichier en tapant un nom de fichier inexistant dans la dialogue box, si ?
Aussi, est-il possible de ne pas spécifier la longueur du String[], il me semble que c'était possible en Pascal (c'est avec ca que j'avais fait mes bases) ?
Ne tiquez pas trop sur la syntaxe, notamment le gros bloque try/catch qui englobe tout !
D'avance, merci pour vos réponse !
Martin
Le problème de sagon était de rajouter des données au milieu du fichier, or toi si j'ai bien compris tu pourrais rajouter tes données à la fin du fichier sans problème avec FileWriter(file,true);.
Pour ton autre question : le String[] est un peu lourd pour manipuler tes données, il faudrait plutôt reprendre ce que je disais et utiliser une Collection.
Pour ton autre question : le String[] est un peu lourd pour manipuler tes données, il faudrait plutôt reprendre ce que je disais et utiliser une Collection.
Merci de ta réponse !
Je reprends doucement aors c'est vrai qu'un fichier texte présente l'avantage de se contrôler facilement, je pensais modifier le code pour faire un fichier de type enregistrement (ce qui doit être plus efficace), une collection c'est équivalent à un enregistrement ?
Je testerai ton astuce pour ecrire à la fin ! merci
Je reprends doucement aors c'est vrai qu'un fichier texte présente l'avantage de se contrôler facilement, je pensais modifier le code pour faire un fichier de type enregistrement (ce qui doit être plus efficace), une collection c'est équivalent à un enregistrement ?
Je testerai ton astuce pour ecrire à la fin ! merci