je souhait lire et écrire dans un fichier .txt, concernent la lecture il n'y a pas de problème.
j'ai créé un JTable avec un JTableModel qui lui fonctionne avec des objets, puis j'ai créé une fonction qui récupère les donnes du fichier txt pour créé les objets que les JTableModel a besoin. jusque la tout va bien.
ensuite quant l'utilisateur souhaite ajouter une donner il va donc cliquer sur un bouton d'ajout. La fenêtre va effacer le JTable pour faire place a un formulaire, l'utilisateur entre les donner puis clique sur valider. une fois chose faite le fichier est réécrit puis le formulaire est donc effacer pour faire place de nouveau au JTable.
seulement voila le problème, pour une raison que je ne comprend pas la donner a ajouter a belle est bien ete ajouter seulement le seul moyen de l'afficher dans le JTable c'est de fermer mon logiciel ouvrir le fichier txt puis le refermer et ré ouvrir le logiciel.
avez-vous une idée pour résoudre mon problème?
merci d'avance pour vos réponses.
pour récupéré les données :
/**
* recupere les valeur du fichier
* @return un tableau d'objet serie
* @throws IOException
*/
public ArrayList<ClassSerie> lecture() throws IOException {
ArrayList<ClassSerie> tabData = new ArrayList<>();
String[] val = null;
BufferedReader lecteurAvecBuffer=null;
String ligne;
InputStream in = getClass().getResourceAsStream("/fichier.txt");
lecteurAvecBuffer = new BufferedReader(new InputStreamReader(in));
while ((ligne = lecteurAvecBuffer.readLine())!=null){
val = ligne.split(";");
tabData.add(new ClassSerie(val[0], val[1], val[2]));
}
lecteurAvecBuffer.close();
return tabData;
}
pour ajouter la donner :
/**
* ecrit dans le fichier
*/
public void ecriture(String val_Ajout) {
ArrayList<String>test = new ArrayList<>();
try {
test = prepa_ecriture();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
test.add(val_Ajout);
File fichierTexte = new File ("src/fichier.txt");
FileWriter ecrireFichier;
try{
ecrireFichier = new FileWriter(fichierTexte);
for(int i = 0; i < test.size(); i++){
ecrireFichier.write(test.get(i));
}
ecrireFichier.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
la class du model :
package application;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
@SuppressWarnings("serial")
public class ModelStatSerie extends AbstractTableModel {
private ArrayList<ClassSerie> serie;
private final String[] entetes = {"Nom", "Saison","Type"};
public ModelStatSerie() {
super();
Bdd bdd = new Bdd();
try {
serie = bdd.lecture();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public int getRowCount() {
return serie.size();
}
public int getColumnCount() {
return entetes.length;
}
public String getColumnName(int columnIndex) {
return entetes[columnIndex];
}
public Object getValueAt(int rowIndex, int columnIndex) {
switch(columnIndex){
case 0:
return serie.get(rowIndex).getNom();
case 1:
return serie.get(rowIndex).getSaison();
case 2:
return serie.get(rowIndex).getType();
default:
return null; //Ne devrait jamais arriver
}
}
public ArrayList<ClassSerie> getProduit() {
return serie;
}
public void setProduit(ArrayList<ClassSerie> client) {
this.serie = client;
}
public void changeListe() {
}
}
si l'art du débogage est de traquer les erreurs alors la programmation est l'art de les créer
Il ne manquerait pas un flush avant de fermer ton fichier (je sait que ses nécessaire sur les flux web mais je ne sait plus si cela est nécessaire pour les fichier...)
Bonjour, Je vois un autre problème. Rien avoir avec le problème actuel. En lecture :
InputStream in = getClass().getResourceAsStream("/fichier.txt");
lecteurAvecBuffer = new BufferedReader(new InputStreamReader(in));
en écriture :
test.add(val_Ajout);
File fichierTexte = new File ("src/fichier.txt");
Pour le moment, ça va fonctionner, vu qu'il est en développement, mais après la compilation du programme, celui-ci ne fonctionnera plus. Tout ce qui se trouve dans le dossier "src", ne doit pas être ouvert avec "File", c'est une ressource, même en écriture.
PS : Quand le programme sera compilé, la ressource sera contenue dans le programme et quand on va enregistrer le fichier dans le dossier "src", celui-ci sera un autre fichier extérieur au programme, donc il ne sera jamais lut par celui-ci. Bonne continuation.
en faite si l'arrayListe n'est pas recharger a proprement dit il recréé au moment de l'affichage du JTable. Donc au moment de l'affichage la fonction de récupération de donner et lance elle créé l'arraylist d'objet puis le passe au model qui place les donner correctement au sein du JTable.
comme la fonction de récupération est lancer le fichier et donc relus de nouveau seulement il ignore complètement les nouvelles donnés enregistrer et ceux jusqu'a l'ouverture manuelle du fichier texte.
Le pb peut venir de plusieurs sources, il faut le cerner :
-pb de sauvegarde du fichier ?
-pb de refresh de l'interface?
Mets toi en debug et dis nous d'où vient le pb
actuelisation d'un fichier txt
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.