IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

Lecture fichier binaire


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut Lecture fichier binaire
    Bonjour,

    J'ai enregistrer une JTable dans un fichier binaire et maintenant je souhaiterais l'ouvrir mais je n'y arrive pas. Bien sur dans mon application. Sa me dit qu'il ne trouve pas mon annee

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class Serialiser implements Serializable {
        /**
             * serialVersionUID
             */
    	private static final long serialVersionUID = 1L;
    	private static String fichier;
    	public Serialiser(String fichier) {
    		Serialiser.fichier = fichier;
    	}
     
    	public void serialiser(CalendarWeekViewer calendrier){
    		try{
    	        FileOutputStream  fout=new FileOutputStream(fichier);
    	        // création d'un "flux objet" avec le flux fichier
    	        ObjectOutputStream  oout=new ObjectOutputStream(fout);
    	        oout.writeObject(calendrier);
    	        System.out.println("Le planning a été sérialisé !");
    	        oout.flush();
    	        oout.close();
    	        fout.close();
    		}  catch(IOException ioe) {
    		        ioe.printStackTrace();
    		}
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class Deserialiser implements Serializable{
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private static File fichier;
    	public Deserialiser(File fichier) {
    		Deserialiser.fichier = fichier;
    	}
     
    	public String deserialiser(){
    		String uneAnnee = null;
    		try{
    	        FileInputStream fis = new FileInputStream(fichier);
    	        ObjectInputStream ois = new ObjectInputStream(fis);
    	        CalendarWeekViewer calendar = null;
    	        calendar = (CalendarWeekViewer)ois.readObject();
    	        ois.close();
    	        fis.close();	        
    		}  catch(IOException ioe) {
    		        ioe.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		return uneAnnee;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    public class CalendarWeekViewer extends JFrame implements ActionListener, ItemListener {
     
        /**
             * serialVersionUID
             */
    	private static final long serialVersionUID = 1L;
    	Calendar calendar;
        DateFormat dateFormatter;
     
        CalendarWeekTableModel tableModel;
     
        JLabel monthLabel, yearLabel;
        JTable table;
        int anneeChoisit;
        int anneeActuelle;
        int anneeDefinitif = 0;
        private WeekPanel weekPanel;
    	private JCheckBox saturdayCheck;
    	private JCheckBox sundayCheck;
        private JMenuBar barreMenu;
    	private JMenu fichier, edition;
    	private JMenuItem sauvegarder, fermer, copier, coller;
    	private Serialiser serialise;
     
    	public CalendarWeekViewer(String uneAnnee) {
     
    		setTitle("Gestion d'emploir du temps");
    		setSize(1400,800);
            this.setLocationRelativeTo(null);
            //Barre de menu
            barreMenu = new JMenuBar();
            fichier = new JMenu("Fichier");
            barreMenu.add(fichier);
        	sauvegarder = new JMenuItem("Sauvegarder");
        	fichier.add(sauvegarder);
        	sauvegarder.addActionListener(this);
        	fermer = new JMenuItem("Fermer");
        	fichier.add(fermer);
        	edition = new JMenu("Edition");
        	barreMenu.add(edition);
        	copier = new JMenuItem("Copier");
        	edition.add(copier);
        	coller = new JMenuItem("Coller");
        	edition.add(coller);
     
        	setJMenuBar(barreMenu);
     
     
    		Annee annee = new Annee();
    		//Convertion de l'année choisit pour la création du calendrieren entier
    		anneeChoisit = annee.anneeChoisit(uneAnnee);
     
            calendar = Calendar.getInstance();
    		anneeActuelle = calendar.get(Calendar.YEAR);
    		//Comparaison de l'année actuelle avec l'année choisit
    		//Si l'année actuelle est avant l'année choisit, on ajoute des années à l'année actuelle pour créer le calendrier
    		//Si l'année actuelle est après l'année choisit, on enlève des années à l'année actuelle pour créer le calendrier
    		if(anneeActuelle < anneeChoisit){
    			anneeDefinitif = anneeChoisit - anneeActuelle; 
    			calendar.add(Calendar.YEAR, +anneeDefinitif);
    		}else if(anneeActuelle > anneeChoisit){
    			anneeDefinitif = anneeActuelle - anneeChoisit;
    			calendar.add(Calendar.YEAR, -anneeDefinitif);
    		}else{
    			calendar.add(Calendar.YEAR, 0);
    		}
     
            calendar.set(Calendar.MONTH,Calendar.SEPTEMBER); // on se positionne sur le mois de septembre (le début de notre liste de semaines)    	   
            calendar.set(Calendar.WEEK_OF_MONTH, 1); // on se positionne sur la première semaine du mois
            calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek()); // on se positionne sur le premier jour officiel
     
            dateFormatter = new SimpleDateFormat("MMMM yyyy");
            createComponents();
        }
     
        private void createComponents() {
        	//Cases à cocher pour la gestion des jours ouvrés / non ouvrés
        	JLabel holidays = new JLabel("Jours Non-ouvrés");
        	holidays.setFont(new Font(null, Font.BOLD, 12));
        	JPanel checkBox = new JPanel();
        	checkBox.add(holidays);
        	saturdayCheck = new JCheckBox("Samedi");
        	sundayCheck = new JCheckBox("Dimanche");
        	checkBox.add(saturdayCheck);
        	checkBox.add(sundayCheck);
        	saturdayCheck.addItemListener(this);
        	sundayCheck.addItemListener(this);
     
        	//Label indiquant l'année de formation choisit
            yearLabel = new JLabel("Année : "+anneeChoisit+ "-"+(anneeChoisit+1));
            yearLabel.setFont(new Font(null, Font.BOLD, 20));
     
            monthLabel = new JLabel(getWeekLabel());
            monthLabel.setFont(new Font(null, Font.PLAIN, 18));
            monthLabel.setVerticalAlignment(JLabel.CENTER);
            monthLabel.setHorizontalAlignment(JLabel.CENTER);
     
            tableModel = new CalendarWeekTableModel(calendar);
            table = new JTable((TableModel)tableModel);
            table.setPreferredScrollableViewportSize(new Dimension(1400, 600));
            table.getTableHeader().setBackground(Color.YELLOW);
            table.setRowHeight(200);
            TableColumnModel tableColumnModel = table.getColumnModel();
     
            for (int i=0; i < tableColumnModel.getColumnCount(); ++i) {
                TableColumn tableColumn = tableColumnModel.getColumn(i);
                tableColumn.setPreferredWidth(200);
            }
     
            JScrollPane tableScrollPane = new JScrollPane(table);
     
            JPanel southPanel = new JPanel(new BorderLayout()); // le panel intermédiaire
     
            // on créé le weekPanel	
            weekPanel = new WeekPanel(this, calendar, anneeActuelle, anneeChoisit);
            // on met le weekPanel dans le panel intermédiaire
            southPanel.add(weekPanel, BorderLayout.SOUTH);
            JPanel panneau1 = new JPanel(new BorderLayout());
            panneau1.setPreferredSize(new Dimension(1400, 600));
            panneau1.add(monthLabel, BorderLayout.NORTH);
            panneau1.add(tableScrollPane, BorderLayout.CENTER);
            panneau1.add(southPanel, BorderLayout.SOUTH);
            JPanel panneau3 = new JPanel(new BorderLayout());
            JPanel panneau2 = new JPanel(new BorderLayout());
            panneau2.add(yearLabel, BorderLayout.WEST);
            panneau2.add(checkBox, BorderLayout.EAST);
            panneau3.add(panneau2, BorderLayout.NORTH);
            panneau3.add(panneau1);
            this.add(panneau3);
        }
     
        public void setWeek(Calendar selection) {
        	calendar.setTime( selection.getTime());
                monthLabel.setText(getWeekLabel());
            	tableModel.fireTableStructureChanged(); 
            	weekPanel.updateSelection();
        }
     
        private String getWeekLabel() {
     
        	Calendar calendar = Calendar.getInstance(); // on créé un nouveau calendar pour pas modifier le calendar qui nous sert pour savoir quelle semaine on affiche
        	calendar.setTime(this.calendar.getTime()); // on recopie dedans la date actuellement mise dans le calendar qui ser pour savoir quelle semaine on affiche
     
        	int week = calendar.get(Calendar.WEEK_OF_YEAR); // on récupère le numéro de la semaine
     
            // le premier jour de cette semaine
        	Date premierJour = calendar.getTime();
        	int monthPremierJour = calendar.get(Calendar.MONTH); // bug ici (il y avait int monthPremierJour = calendar.get(Calendar.MONDAY); donc n'importe quoi)!!!
     
            // le dernier jour de cette semaine
        	calendar.add(Calendar.WEEK_OF_YEAR, 1);
        	calendar.add(Calendar.DAY_OF_WEEK, -1);
        	Date dernierJour = calendar.getTime();
     
        	int monthDernierJour = calendar.get(Calendar.MONTH);
     
        	return WeekPanel.getWeekLabel(week, premierJour, dernierJour, monthPremierJour, monthDernierJour); 
        }
     
    	public void actionPerformed(ActionEvent event) {
    		Object source = event.getSource();
    		//Sauvegarde du fichier au format binaire
    		if(source.equals(sauvegarder)){
    		    JFileChooser chooser = new JFileChooser();
    		    chooser.setCurrentDirectory(new File("/Documents"));
    		    int retrival = chooser.showSaveDialog(null);
    		    if (retrival == JFileChooser.APPROVE_OPTION) {
    		        try {
    		            String fw = (chooser.getSelectedFile()+"_"+anneeChoisit+"_"+(anneeChoisit+1)+".dat");
    		            serialise = new Serialiser(fw);
    					serialise.serialiser(this);
    		        } catch (Exception ex) {
    		            ex.printStackTrace();
    		        }
    		    }		
    		}
    	}
     
    	@Override
    	//A FINIR
    	public void itemStateChanged(ItemEvent event) {
    		Object source = event.getSource();
    		int status = event.getStateChange();
    		if (source.equals(saturdayCheck)) {
    			if(status == ItemEvent.SELECTED){
    				JTableRender mcr = new JTableRender();
    				for (int columnIndex = 0; columnIndex < table.getColumnCount(); columnIndex ++) {					
    					table.getColumnModel().getColumn(5).setCellRenderer(mcr);
    				}
    			}
    		}
    		System.out.println(saturdayCheck.isSelected());
     
    		if (source.equals(sundayCheck)) {
     
    		}
     
    	}
    }
    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu peux nous donner le message d'erreur exact, et sa stacktrace?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut
    Voilà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    java.lang.NullPointerException
    	at java.text.SimpleDateFormat.parse(Unknown Source)
    	at java.text.DateFormat.parse(Unknown Source)
    	at metiers.Annee.anneeChoisit(Annee.java:39)
    	at vues.CalendarWeekViewer.<init>(CalendarWeekViewer.java:64)
    	at vues.Accueil.actionPerformed(Accueil.java:79)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$400(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    Apparemment, c'est sa qui merre, il me récupère pas mon année:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		//Convertion de l'année choisit pour la création du calendrieren entier
    		anneeChoisit = annee.anneeChoisit(uneAnnee);
    Ceci peut peut-être aider, c'est le formulaire qui appel le fichier à ouvrir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    if(openPlanning.isSelected()){
    			//Ouverture d'un planning existant
    		    chooser = new JFileChooser();
    		    chooser.setVisible(true);
    		    chooser.setCurrentDirectory(new File("/Documents"));
    		    int retrival = chooser.showOpenDialog(null);
    		    //A FINIR
    		    if (retrival == JFileChooser.APPROVE_OPTION) {
    		        try {
    		            File fichier = (chooser.getSelectedFile());
    					deserialise = new Deserialiser(fichier);
    					calendrier = null;
    					uneAnnee = deserialise.deserialiser();
    					calendrier = new CalendarWeekViewer(uneAnnee);
    					calendrier.setVisible(true);
    					this.setVisible(false);
     
    		        } catch (Exception ex) {
    		            ex.printStackTrace();
    		        }
    		    }
    		}

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Cette méthode retourne toujours null (et c'est avec ce retour que tu initialises CalendarWeekViewer, et donc ça plante lors du parsing de ce null) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public String deserialiser(){
    		String uneAnnee = null;
    		try{
    	        FileInputStream fis = new FileInputStream(fichier);
    	        ObjectInputStream ois = new ObjectInputStream(fis);
    	        CalendarWeekViewer calendar = null;
    	        calendar = (CalendarWeekViewer)ois.readObject();
    	        ois.close();
    	        fis.close();	        
    		}  catch(IOException ioe) {
    		        ioe.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		return uneAnnee;
    	}
    Au passage, pourquoi sérialiser/désérialiser un CalendarWeekViewer (un composant graphique !) juste dans le but de stocker une String (et je ne parle même pas de la variable fichier static !) ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut
    C'est pour conserver les données quand on ferme l'application et quand on l'ouvre, on va pouvoir récupérer notre planning tel qu'on l'avais sauvegarder dans le fichier.
    Tu me conseil de faire comment pour garder les données dans le fichier binaire?

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Par exemple, DataOutputStream/FileOutputStream pour l'écriture et DataInputStream/FileInputStream pour la lecture (même si pour stocker des données, il y'a pleins d'alternatives, en binaire, ou en texte : properties, xml, ..., db...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class StockageDemo {
     
    	private static final String FICHIER = "fichier.dat";
     
    	public static void main(String[] args) {
     
    		String stringAStocker = "n'importe quoi";
     
    		try {
    			ecrireDansFichier(stringAStocker, FICHIER);
    			String stringStockee = lireDepuisFichier(FICHIER);
    			System.out.println(stringStockee);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    	private static void ecrireDansFichier(String string, String fichier) throws IOException {
    		try(DataOutputStream output = new DataOutputStream(new FileOutputStream(fichier))) {
    			output.writeUTF(string);
    		}
    	}
     
    	private static String lireDepuisFichier(String fichier) throws IOException {
    		try(DataInputStream input = new DataInputStream(new FileInputStream(fichier))) {
    			return input.readUTF();
    		}
    	}
     
    }
    java.io
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut
    Du quoi là, pour écrire dans mon fichier en bianire, je stocke juste l'année?

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totot Voir le message
    Du quoi là, pour écrire dans mon fichier en bianire, je stocke juste l'année?
    Oui, comme dans ta méthode de lecture, tu lis juste l'année, je me suis dit que tu voulais juste stocker l'année. Si tu veux stocker autre chose, tu peux écrire ce que tu veux dans le fichier (voir DataOutputStream), et lire en conséquence.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut
    Ok
    En effet, je vais stocké d'autres informations

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut
    Je viens de faire comme ceci mais après comment faire pour récupérer séparément des valeur, par exemple une année et un nom?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	public String deserialiser(){
    		String string = null;
    		try{
    	        FileInputStream fis = new FileInputStream(fichier);
    	        ObjectInputStream ois = new ObjectInputStream(fis);
    	        string =  ois.readUTF();
    	        ois.close();
    	        fis.close();	        
    		}  catch(IOException ioe) {
    		        ioe.printStackTrace();
    		}	
    		return string;
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (retrival == JFileChooser.APPROVE_OPTION) {
    		        try {
    		            File fichier = (chooser.getSelectedFile());
    					deserialise = new Deserialiser(fichier);
    					calendrier = null;
    					uneAnnee = deserialise.deserialiser();
    					calendrier = new CalendarWeekViewer(uneAnnee);
    					calendrier.setVisible(true);
    					this.setVisible(false);
     
    		        } catch (Exception ex) {
    		            ex.printStackTrace();
    		        }
    		    }

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Je n'ai pas parlé d'ObjectInputStream/ObjectOutputStream mais de DataInputStream/DataOutputStream) !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    public class StockageDemo {
     
    	private static final String FICHIER = "fichier.dat";
    	private static final DateTimeFormatter DATEFORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy");
     
    	public static void main(String[] args) {
     
    		Data dataAStocker = new Data();
    		dataAStocker.setNom("Martin");
    		dataAStocker.setPrenom("Jeanne");
    		dataAStocker.setDateNaissance(LocalDate.of(1978,  Month.OCTOBER, 18));
    		dataAStocker.setTaille(1.67f);
    		try {
    			ecrireDansFichier(dataAStocker, FICHIER);
    			Data dataStockee = lireDepuisFichier(FICHIER);
    			System.out.println(dataStockee);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    	private static void ecrireDansFichier(Data data, String fichier) throws IOException {
    		try(DataOutputStream output = new DataOutputStream(new FileOutputStream(fichier))) {
    			output.writeUTF(data.getNom());
    			output.writeUTF(data.getPrenom());
    			output.writeFloat(data.getTaille());
    			output.writeUTF(data.getDateNaissance().format(DATEFORMATTER));
    		}
    	}
     
    	private static Data lireDepuisFichier(String fichier) throws IOException {
    		try(DataInputStream input = new DataInputStream(new FileInputStream(fichier))) {
    			Data data = new Data();
    			data.setNom(input.readUTF());
    			data.setPrenom(input.readUTF());
    			data.setTaille(input.readFloat());
    			data.setDateNaissance(LocalDate.parse(input.readUTF(), DATEFORMATTER));
    			return data;
    		}
    	}
     
    	public static class Data {
     
    		private String nom;
    		private String prenom;
    		private LocalDate dateNaissance;
    		private float taille;
    		public String getNom() {
    			return nom;
    		}
    		public void setNom(String nom) {
    			this.nom = nom;
    		}
    		public String getPrenom() {
    			return prenom;
    		}
    		public void setPrenom(String prenom) {
    			this.prenom = prenom;
    		}
    		public LocalDate getDateNaissance() {
    			return dateNaissance;
    		}
    		public void setDateNaissance(LocalDate dateNaissance) {
    			this.dateNaissance = dateNaissance;
    		}
    		public float getTaille() {
    			return taille;
    		}
    		public void setTaille(float taille) {
    			this.taille = taille;
    		}
     
    		@Override
    		public String toString() {
    			return "["+nom+", "+prenom+", "+dateNaissance+", "+taille+"]";
    		}
     
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut
    J'essaye de refaire mon code plus proprement et je vient donc de suivre ce tuto:
    http://jmdoudoux.developpez.com/cours/developpons/java/

    Et la lecture ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class Deserialiser implements Serializable{
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	private static File fichier;
    	private Calendrier calendrier;
    	public Deserialiser(File fichier, Calendrier calendrier)
    	{
    		Deserialiser.fichier = fichier;
    		this.calendrier = calendrier;
    	}
     
    	public Calendrier deserialiser(){
    		try{
    	        FileInputStream fis = new FileInputStream(fichier);
    	        ObjectInputStream ois = new ObjectInputStream(fis);
    	        calendrier = (Calendrier)ois.readObject();
    	        System.out.println(calendrier.getUneAnnee());
    	        ois.close();
    	        fis.close();
    		}  catch(IOException ioe) {
    		        ioe.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return calendrier;
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    if (retrival == JFileChooser.APPROVE_OPTION) {
    		        try {
    		            File fichier = (chooser.getSelectedFile());
    					calendrier = new Calendrier();
     
    					deserialise = new Deserialiser(fichier, calendrier);
    					calendrier = deserialise.deserialiser();
    					calendrier.getUneAnnee().getAnnee();
     
    					System.out.println(calendrier.getUneAnnee());
    					//calendrier = new CalendarWeekViewer(uneAnnee);
    					//calendrier.setVisible(true);
    					this.setVisible(false);
     
    		        } catch (Exception ex) {
    		            ex.printStackTrace();
    		        }
    		    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    java.lang.ClassCastException: java.lang.String cannot be cast to metiers.Calendrier
    	at metiers.Deserialiser.deserialiser(Deserialiser.java:31)
    	at vues.Accueil.actionPerformed(Accueil.java:80)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$400(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    1. Je ne sais pas comment tu obtiens ce code en suivant un tutoriel
    2. Je ne sais pas pourquoi tu t'obstines à utiliser la sérialisation
    3. La sérialisation/désérialisation est destinée à transformer des instances de classe en chaines de caractèeres. Par exemple, pour les transférer par réseau, en http, pour faire des applications collaboratives. On peut techniquement les utiliser pour stocker les instances de classe dans des fichiers, mais ce n'est pas la meilleure manière (pas la plus simple, déjà, et en plus ça impose des contraintes qu'il n'est pas nécessaire de s'ajouter), et ce n'est pas utile. Déjà ça oblige la classe a être Serializable, et ses attributs a être serializable ou transient. Ensuite, il y a une gestion de notion de compatibilité qui est génante lorsqu'on fait évoluer les données : c'est très restrictif de s'imposer ça. En plus, ça devient encore plus génant si on veut stocker des données venant de différentes classes, voire des collections de données, etc. On complique inutilement le stockage de données.
    4. Si tu veux stocker des données, stocke des données.
    5. Et oui, un String ne peut pas être castéeen Calendrier. Et tu lis une String, probablement parce que tu sérialises un String. La sérialisation serialise une instance de classe A qu'on déserialise en instance de classe A.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture fichier binaire et inversion d'octets
    Par zoro_le_renard dans le forum Fortran
    Réponses: 8
    Dernier message: 17/07/2007, 20h35
  2. Lecture fichier binaire
    Par djidji dans le forum Langage
    Réponses: 1
    Dernier message: 09/11/2006, 11h58
  3. Réponses: 5
    Dernier message: 02/10/2006, 22h54
  4. Lecture fichier binaire
    Par kek_net dans le forum Langage
    Réponses: 5
    Dernier message: 07/08/2006, 19h37
  5. Lecture fichier binaire
    Par gabule dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/05/2006, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo