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

Langage Java Discussion :

sérialisation-écriture dans un fichier


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Par défaut sérialisation-écriture dans un fichier
    J'ai 2 problèmes :
    1/Je n'arrive pas à lire des données employés et manager se trouvant dans un fichier et séparées par des , et à les envoyer dans un autre fichier

    voici mon code

    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
    /**
     * @Application de la sérialisation
     * @enregistre les objets Employee et Manager dans un même fichier travailleurs.txt
     * lit des données de type délimité(séparé par,)
     * pour ajouter ces donnees au fichier employee
     */
    import java.io.*;
    import java.util.*;
    class ObjectFileTest3b
    {  public static void main(String[] args)
       {  
     
          //File fichier=new File("Em.txt");
          try
          {  
            //Lire les données d'un fichier texte et les stocker dans un vecteur à charger dans le fichier manager.dat
     
            Employee[] staffD = new Employee[100];
             File fichier=new File("Travailleurs.txt");
             FileReader file1=new FileReader(fichier);
             BufferedReader buff1=new BufferedReader(file1);
             boolean eof=false;
             int i=0;      
      while(!eof)
             {
                String line=buff1.readLine();
                StringTokenizer st = new StringTokenizer(line,",");
     
                if (line.charAt(0)=='E')
                {                   
                    String eM,nameE;
                    double salaryE;
                    int dayE,monthE,yearE;
     
                    eM=st.nextToken();
                    nameE=st.nextToken();
                    salaryE=Double.parseDouble(st.nextToken());
                    dayE=Integer.valueOf(st.nextToken()).intValue();
                    monthE=Integer.valueOf(st.nextToken()).intValue();
                    yearE=Integer.valueOf(st.nextToken()).intValue();
     
    System.out.println("les employes du fichier travailleurs sont :"+nameE+","+salaryE+","+dayE+","+monthE+","+yearE);
                    staffD[i]=new Employee(nameE,salaryE,dayE,monthE,yearE);
                    i++;
                 }
                if (line.charAt(0)=='M')
                {
     
                    String eM,nameM,secretaryNameM;
                    double salaryM;
                    int dayM,monthM,yearM;
     
                    eM=st.nextToken();
                    nameM=st.nextToken();
                    salaryM=Double.parseDouble(st.nextToken());
                    dayM=Integer.valueOf(st.nextToken()).intValue();
                    monthM=Integer.valueOf(st.nextToken()).intValue();
                    yearM=Integer.valueOf(st.nextToken()).intValue();
                    secretaryNameM=st.nextToken();
     
    System.out.println("les managers du fichier travailleurs sont :"
    +nameM+","+salaryM+","+dayM+","+monthM+","+yearM+","+secretaryNameM);
                    staffD[i]=new Manager(nameM,salaryM,dayM,monthM,yearM,secretaryNameM);
                    i++;
                 }
             }
             //Ecriture dans un fichier.dat  
             ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.dat"));
             out.writeObject(staffD);
             out.close();
             ObjectInputStream in =  new
                ObjectInputStream(new FileInputStream("employee.dat"));
             Employee[] newStaffD = (Employee[])in.readObject();
             //in.close();
             //int i;
             for (i = 0; i < newStaffD.length; i++)
                newStaffD[i].raiseSalary(100);
             for (i = 0; i < newStaffD.length; i++)
                newStaffD[i].print();
          }
          catch(Exception e)
          {  System.out.print("Error: " + e);
             System.exit(1);
          }
       }
    }
     
    class Employee implements Serializable
    {  private String name;
       private double salary;
       private int day,month,year;
       public Employee(String n, double s, int d,int m, int y)
       {  name = n;
          salary = s;
          day = d;
          month = m;
          year = y;
       }
       public Employee() {}
       public void print()
       {  System.out.print("\n"+name + " " + salary 
             + " " + day+"/"+month+"/"+year);
       }
       public int getYear(){
        return year;
       }
       public void raiseSalary(double byPercent)
       {  salary *= 1 + byPercent / 100;
       }  
    }
     
    class Manager extends Employee
    {  private String secretaryName;
       public Manager(String n, double s, int d,int m,int y,String sec)
       {  super(n, s, d,m,y);
          secretaryName = sec;
       }
       public Manager() {}
       public void raiseSalary(double byPercent)
       {  // add 1/2% bonus for every year of service
          GregorianCalendar today = new GregorianCalendar();
          double bonus = 0.5 * (today.get(Calendar.YEAR) - super.getYear());
          super.raiseSalary(byPercent + bonus);
       }
       public void print(){
        super.print();
       System.out.print(" "+secretaryName);
       }
    }

    et voici le mesaage à l'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Test employé:durant1000.0591974
    Test employé:dupont900.0781969
    Test manager:duval5000.0341981marie
    Test manager:bailleux7000.0991969colette
    Error: java.lang.NullPointerException

    il lit la première partie de mon code mais il ne met rien dans employee.dat

    si vous voyez où ça cloche où si vous avez 1 façon plus simple de le faire, tes commentaires sont les bienvenus

    2/Je n'arrive pas à prendre ce qui se trouve dans un fichier et à le mettre dans une table d'une dase de données access, ni à faire l'inverse, prendre ce qui se trouve dans une table de bd access et le mettre dans un fichier (dieu seul sait si j'ai passé des jours et des jours , ça ne va pas)
    J'enverrai mon code après la résolution du 1er problème.

    Si vous aviez un programme qui fait cela, ça me rendrait bien service.

    Merci d'avance

  2. #2
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    je pense que c'est un problème simple de sérial/déserial. Sans doute que tu dois indiquer l'implémentation de Serializable dans les 2 classes Employe ET Manager. Sinon lance ton code sur un debugger Java et controle les lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    readObject()
     writeObject()
    charAt(0)
    new FileOutputStream()
    etc.

  3. #3
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    c'est ce qu'on entend par "héritage multiple" en jargon de programmation OO

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/08/2005, 11h57
  2. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  3. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28
  4. Passer à la ligne lors de l'écriture dans un fichier
    Par hams dans le forum Assembleur
    Réponses: 4
    Dernier message: 17/04/2005, 19h25
  5. [JUnit] Junit écriture dans un fichier
    Par mikael35 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 10/08/2004, 13h11

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