Page 1 sur 2 12 DernièreDernière
Résultats de 1 à 10 sur 14

Sujet : [java][io] RandomAccessFile

  1. #1
    Membre MP
    Inscrit
    août 2013
    Messages
    22

    [java][io] RandomAccessFile

    Bonjour tout le monde....

    je ss débutante
    voilà je galère un peu , meme beaucoup avec mon programme

    je vous explique, j\'ai un logiciel a faire qui doit effectuer des traitements sur des patients...
    un patient est un (nom, prenom, sexe etc...)

    l\'identifiant du patient est alors son nom et son prenom

    je veux à partir de mon menu, ajouter des nouveaux patients et en ouvrir des anciens...donc je stocke mes objets patients dans une base de données (qui n\'est rien d\'autre qu\'un fichier .dat).

    Mon programme fonctionne bien, cependant j\'ai un problème chaque fois que je valide mon nouvel enregistrement j\'ai une exception d\'erreur de lecture de fichier qui s\'affiche alors que le programme ajoute bien l\'objet patient dans le fichier base de données mais je ne comprends pas quel est le problème...

    je vous envoie une partie de mon code...

    merci de m\'aider svp:

    Code:
    package increment1;
    
    
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.io.*;
    
    public class NouveauCR extends JFrame
    {
    private RandomAccessFile fichier,sortie;
    private IUBilan interfaceUtilisateur;
    private IUFrame interfaceFrame;
    private EnregistrementPatient patient;
    private JDesktopPane lebureau ;
    public JButton boutonvalider;
    private MyInternalFrame ssfenetre;
    
    public void ouvrirBD(){
    //ouvrir le fichier à acces direct comportant la base de données
    try {
    	 	//Ouvrir le fichier en ecriture et en lecture
    		sortie= new RandomAccessFile (\"C:\\\\Documents and Settings\\\\Ju\\\\Mes documents\\\\Logiciels\\\\eclipse\\\\workspace\\\\Developpement\\\\increment1\\\\BD.dat\",\"rw\");
    		EnregistrementPatient patientnull= new EnregistrementPatient();
    		//Ecrire 1 enregistrements  vierges
    		for(int compteur =0;compteur<1;compteur++)
    		patientnull.ecrire(sortie);
    		//fermer le fichier
    		sortie.close();
    	}
    			
    		catch (IOException ioException){
    		JOptionPane.showMessageDialog(this,\"Fichier inexistant\",
    		\"Nom de fichier incorrect\",JOptionPane.ERROR_MESSAGE);
    			
    		}
    
    }//Fin méthode ouvrirBD
    
    
    
    
    public NouveauCR (RandomAccessFile newFile, MyInternalFrame sf)
    
    {
    	super (\"Nouveau Compte Rendu\");
    	fichier=newFile;
    	
    	//Preparer les composants GUI
    	interfaceUtilisateur = new IUBilan(7);
    	
    	getContentPane().add(interfaceUtilisateur,BorderLayout.CENTER);
    	//Mettre en place le bouton de validation et inscrire l\'ecouteur
    	boutonvalider =interfaceUtilisateur.getBoutonExecuterTache1();
    	boutonvalider.setText(\"Valider\");
    	boutonvalider.addActionListener(
    	new ActionListener(){
    		public void actionPerformed(ActionEvent evenement)
    		{
    		
    			ajouterPatient(getEnregistrement());
    		
    			setVisible(false);
    			interfaceUtilisateur.viderChamps();
    			
    	
    }
    }
    	
    		);
    	ssfenetre = sf;
    	
    	//Mettre en place le bouton Annuler et inscrire l\'ecouteur
    	
    	JButton boutonAnnuler = interfaceUtilisateur.getBoutonExecuterTache2();
    	boutonAnnuler.setText(\"Annuler\");
    	boutonAnnuler.addActionListener(
    	new ActionListener()
    	{
    		//Quitter boite de dialogue sans stocker le nouvel enregistrement
    		public void actionPerformed(ActionEvent evenement)
    		{
    			
    			setVisible(false);
    			interfaceUtilisateur.viderChamps();
    		}
    	}//Fin de classe interne anonyme
    );//Fin de l\'appel à addActionListener
    
    setSize(400,250);
    setVisible(false);
    
    }//Fin du constructeur
    
    
    
    //-------------------------------------------------------
    //Methode getEnregistrement
    //-------------------------------------------------------
    //Obtenir un enregistrement du fichier
    //------------------------------------------------------
    
    
    private EnregistrementPatient getEnregistrement()
    {
    
    EnregistrementPatient patient = new EnregistrementPatient();
    
    //prendre un enregistrement dans le fichier
    try {
    	
    	//JTextField champCle = interfaceUtilisateur.getChamps()[IUBilan.IDENTIFIANT];
    	/*JTextField champCle = interfaceUtilisateur.getChamps()[IUBilan.NOM];
    	int numeroident = Integer.parseInt(champCle.getText());
    	//String numeroident = champCle.getText();
    	if (numeroident <1 || numeroident >10000){
    		JOptionPane.showMessageDialog(this,\"Aucun bilan n\'a encore été fait pour ce patient\",
    		\"Erreur\",JOptionPane.ERROR_MESSAGE);
    		return patient;
    	}*/
    	long pos= fichier.getFilePointer();
    	
    	//Recherche l\'enregistrement à l\'emplacement spécifié
    	fichier.seek(pos-1*EnregistrementPatient.taille());	
    	//lire un enregistrement du fichier
    	patient.lire(fichier);
    	fichier.close();
    		
    	}
    		
    		
    
    
    //Traiter les problèmes de gestion de fichier
    
    catch (NumberFormatException numberformat){
    	JOptionPane.showMessageDialog(this,\"Ce numéro de patient n\'existe pas\",
    	\"Format de nombre incorrect\",JOptionPane.ERROR_MESSAGE);
    }
    catch (IOException ioException){
    	JOptionPane.showMessageDialog(this,\"Erreur de lecture de fichier\",
    	\"Erreur\",JOptionPane.ERROR_MESSAGE);
    }
    System.out.println (patient);
    
    return patient;
    } //fin méthode getEnregistrement
    
    
    //-------------------------------------------------------
    //Methode ajouterPatient
    //-------------------------------------------------------
    //Ajouter l\'enregistrement au fichier
    //-------------------------------------------------------
    		
    public void ajouterPatient(EnregistrementPatient patient)
    {
    	
    	//int numident=0;
    	String[] champs = interfaceUtilisateur.getValeursChamps();
    	//if (!champs[IUBilan.IDENTIFIANT].equals(\"\"))
    	if(patient.getNom()== null)
    	{
    		JOptionPane.showMessageDialog(this,\"Vous devez saisir un patient\",
    		\"Erreur\", JOptionPane.ERROR_MESSAGE);
    		return;
    	}
    	//Sortir les valeurs dans le fichier
    	
    	try{
    		
    		
    	//	patient.setIdentif(Integer.parseInt(champs[IUBilan.IDENTIFIANT]));
    		patient.setNom(champs[IUBilan.NOM]);
    		patient.setPrenom(champs[IUBilan.PRENOM]);
    		patient.setNaissance(champs[IUBilan.NAISSANCE]);
    		patient.setSexe(champs[IUBilan.SEXE]);
    		patient.setPathologie(champs[IUBilan.PATHOLOGIE]);
    		patient.setExamendde(champs[IUBilan.EXAMENDDE]);
    		patient.setExamenrea(champs[IUBilan.EXAMENREA]);
    		
    		//Recherche l\'enregistrement à l\'emplacement spécifié
    	//	long pos= fichier.length();
    		long pos= fichier.getFilePointer();
    		//if (patient.getNom() == patient.setNom(champs[IUBilan.NOM]));
    		fichier.seek(pos-1*EnregistrementPatient.taille());
    		//((patient.getNom()-1)*EnregistrementPatient.taille());
    		//Ecrire l\'enregistrement
    		
    		patient.ecrire(fichier);
    		//lireEnregistrement();
    		ssfenetre.setPatient(patient);
    		fichier.close();
    	}
    	
    	
    		//Traiter un format d\'identifiant non valide
    	catch (NumberFormatException numberFormat){
    	JOptionPane.showMessageDialog(this,
    	\"Ce patient n\'existe pas\",\"Format de nombre incorrect\",
    	JOptionPane.ERROR_MESSAGE);
    	}
    
    //Traiter les problèmes de gestion de fichier
    
    	catch (IOException ioException){
    	JOptionPane.showMessageDialog(this,\"Erreur de lecture de fichier\",
    	\"Erreur\",JOptionPane.ERROR_MESSAGE);
    	}
    		
    }
    //Fin méthode ajouterEnregistrement
    
    
    
    
    	public EnregistrementPatient getPatient()
    	{	
    		return patient;
    	}
    }//Fin classe NouveauCR

  2. #2
    Membre MP
    Inscrit
    août 2013
    Messages
    1 823
    Donne nous une copie de l\'exception se sera plus simple STP :wink:

  3. #3
    Membre MP
    Inscrit
    août 2013
    Messages
    22
    En fait, j\\\'ai essayé de regler un peu les choses...mon problème est sur l\\\'emplacement ou je dois me placer pour ecrire....

    Code:
    long pos= fichier.getFilePointer();
    fichier.seek(pos+1*EnregistrementPatient.taille());
    				//Ecrire l\\\'enregistrement
    		
    patient.ecrire(fichier);
    		//lireEnregistrement();
    ssfenetre.setPatient(patient);
    fichier.close();System.out.println(pos);
    maintenant, je crois que j\\\'arrive à ecrire mais si le fichier contenant la base de données est vide...a la première insertion il lève une IOException
    a la deuxièmle insertion c nikel...
    est ce que tu peux m\\\'aider je ss complètement perdue

  4. #4
    Visiteur MP
    Visiteur MP
    Salut,
    cependant j\'ai un problème chaque fois que je valide mon nouvel enregistrement j\'ai une exception d\'erreur de lecture de fichier qui s\'affiche alors que le programme ajoute bien l\'objet patient dans le fichier base de données mais je ne comprends pas quel est le problème...
    Tu provoque certainement des conflits sur les droits. tu dois faire une sorte de lecture/écriture pas très propre. vérifie bien que ton fichier est fermé puis réouvert avant de lire des modifs...

    Donne nous une copie de l\'exception se sera plus simple STP
    Je ne la vois toujours pas... Aurais tu oublié ??
    :wink:

  5. #5
    Membre MP
    Inscrit
    août 2013
    Messages
    22
    Non, je n\'ai pas oublié mais en fait ca m\'affiche la boite de dialogue que j\'ai porgrammé lorsqu\'il y a une erreur IOException donc ca m\'affiche une boite : \"Erreur de lecture du fichier\"...
    Mais mis a part que j\'ai peut etre une erreur, est ce que la méthode est bonne ou je suis totlemnt a coté de la plaque???

  6. #6
    Membre MP
    Inscrit
    août 2013
    Messages
    1 823
    [citation=-]si le fichier contenant la base de données est vide...a la première insertion il lève une IOException
    a la deuxièmle insertion c nikel... [/citation]

    50 contre 1 que cela proviens du fait que le fichier dans lequel tu desire enregistrer n\'existe pas lors de l\'execution du premier enregistrement.

    essaie d\'en creer un bidon qui est vide et fais un test pour voir si l\'erreur est produite.

    Sinon Poste le libellé exact de l\'exception (stackTrace ou Exception.getMessage() ) sans cela il est impossible d\'y voir clair. :wink:

  7. #7
    Membre MP
    Inscrit
    août 2013
    Messages
    22
    perdu:!
    le fichier sur lequel je travaille existe et la prmeière fois il est vide...
    je n\'ai pas vraiment une exception mé juste la fenetre qui s\'affiche du au bout de code suivant
    Code:
    catch (IOException ioException){
    	JOptionPane.showMessageDialog(this,\"Erreur de lecture de fichier\",
    	\"Erreur\",JOptionPane.ERROR_MESSAGE);
    	}

  8. #8
    Membre MP
    Inscrit
    août 2013
    Messages
    1 823
    Domage,

    JOptionPane.showMessageDialog(this,ioException.get Message(),\"Erreur\",JOptionPane.ERROR_MESSAGE);

    c\'est ça l\'important pas \'Erreur de fichier\'

    sans ce message, on peut pas savoir ce qui ce passe, sinon pour un utilisateur ton message va très bien.

  9. #9
    Membre MP
    Inscrit
    août 2013
    Messages
    22
    ok, je comprends....
    mais que faut \'il que je fasse?

  10. #10
    Membre MP
    Inscrit
    août 2013
    Messages
    1 823
    Nous montrer le texte exact de l\'exception pour qu\'on puisse voir ce qui se passe lors du bug.

    Exception.getMessage() renvoie un truc du genre :

    java.io.FileNotFoundException: c:\\log.txt (Le fichier spécifié est introuvable)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.jav a:103)
    at java.io.FileInputStream.<init>(FileInputStream.jav a:66)
    at java.io.FileReader.<init>(FileReader.java:41)
    at ju972.Word.getWordCount(Word.java:33)
    at ju972.Test.main(Test.java:19)
    c:\\log.txt (Le fichier spécifié est introuvable)


    celle la viens du truc qu\'on avait vu enssemble le mois dernier :wink:

    et est affichée sur la console de Eclipse par le code suivant :

    Code:
    catch (FileNotFoundException e) {
        e.printStackTrace();
        System.out.println(e.getMessage());
    }
    Avec ce genre de message tu y voie plus clair dans ce qui se passe.
    D\'ailleurs, je te conseille de commenter tes boites de dialogue (\'//\') tant que le logiciel ne marche pas et de mettre les deux lignes plus haut a la place en attendant.

    au moins tu voie de suite ou et quoi.

Page 1 sur 2 12 DernièreDernière

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé
Please disable Adblock!