tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017
-
4 juil. 2009 à 22:05
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017
-
24 juil. 2009 à 13:19
Bonjour,
J'ai des programmes en C que je dois codifier en Java. Il s'agit de créer un fichier structuré, de rechercher des informations dans ces fichiers et de les modifier, etc.
C'est la première fois que je manipule des fichiers en Java, alors si quelqu'un peut m'aider en me disant d'abord si c'est le même principe qu'en C et quelles sont les fonctions pour ouvrir un fichier en lecture, en écriture, les fonctions pour lire un fichier, etc.
Merci d'avance
No dejes para mañana lo que puedes hacer hoy
A voir également:
No enclosing instance of type main is accessible. must qualify the allocation with an enclosing instance of type main (e.g. x.new a() where x is an instance of main).
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 5 juil. 2009 à 23:23
Par contre après une journée de lecture des différents cours que j'ai trouvé, voilà mon code. Il s'agit de la création d'un fichier structuré où chaque enregistrement est une classe contenant un nom, un prénom et une note.
Mon programme se bloque à la ligne r.setNom(lireChaine()); Si quelqu'un manipule bien les stream et pourrait m'aider je le remercie d'avance.
***************************
public class Resultat implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
public String nom = "";
public String prenom = "";
public float note = 0;
public Resultat(final String nom, final String prenom, final float note) {
this.nom = nom;
this.prenom = prenom;
this.note = note;
}
public void setNom(final String nom) {
this.nom = nom;
}
public void setPrenom(final String prenom) {
this.prenom = prenom;
}
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 6 juil. 2009 à 16:08
L'instanciation
Resultat r = new Resulat();
Je l'ai déjà essayée mais j'avais toujours une erreur, c'est seulement quand j'ai mis Resultat r = null; que ça a marché.
Mais peut être le constructeur, oui c'est vrai je n'ai pas mis cela, mais excusez moi, n'oubliez pas que je suis très débutante en Java, donc je ne vois pas comment le faire.
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 6 juil. 2009 à 18:13
En faisant ces modifications, voici le message d'erreur que j'ai:
No enclosing instance of type Crefich is accessible. Must qualify the allocation with an enclosing instance of type Crefich (e.g. x.new A() where x is an instance of Crefich).
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 7 juil. 2009 à 09:16
normal, vu que tu as défini une classe interne. D'ailleurs je ne vois aucune raison pour que cette classe soit une classe interne.
Sors ta classe Resultat de la classe CreFich pour que ce soit une classe normale et ça marchera
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 7 juil. 2009 à 09:52
Cher kirua12, je te remercie beaucoup pour ton aide, c'est vrai quand j'ai rendu la classe externe tout a marché sans problème.
Maintenant je vais faire un programme qui lit le fichier que j'ai créé pour boucler.
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 7 juil. 2009 à 14:22
Re bonjour,
Pour la lecture de mon fichier, j'ai écris ce code. Il s'arrête de l'exécution dans la ligne Resultat r = (Resultat) ois.readObject();
Pourtant je lis le fichier que j'ai créé avec le programme précédent.
Voici le code:
**************************************
import java.io.*;
import java.util.Scanner;
@SuppressWarnings("serial")
class Resultat implements java.io.Serializable {
public String nom = "";
public String prenom = "";
public float note = 0;
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 7 juil. 2009 à 16:07
Une erreur d'exécution, la voici:
java.io.InvalidClassException: Resultat; local class incompatible: stream classdesc serialVersionUID -3764480536014271752, local class serialVersionUID -3285461882783943804
at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at Lecturefich.main(Lecturefich.java:63)
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 7 juil. 2009 à 16:19
Différence de structure entre les objets (pour simplifier).
Quand tu as créé ton fichier, ta classe Resultat avait une certaine structure. Quand tu relis le fichier, la structure de la classe Resultat est différente.
Exécute d'abord le 1er code pour créer le fichier et lis le dans la foulée, ça devrait marcher.
Pense à ajouter le champ serialVersionUID dans ta classe Resultat pour éviter ce problème
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 7 juil. 2009 à 17:15
Oui en fait, quand j'ai ajouté serialVersionUID ça a marché. Sauf qu'il reste juste un petit souci. C'est qu'il m'affiche toujours le même enregistrement, donc la variable ois (ObjectInputStream) que j'ai créé ne s'écrase pas à chaque readObject, elle garde les mêmes premiers données.
tdaouas
Messages postés27Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention23 octobre 2017 8 juil. 2009 à 20:58
Salut kirua12,
Sais tu si c'est possible avec le même système des stream de faire une recherche avec le nom et s'il est trouvé de modifier sa note.
Quand je l'ai programmé, j'ai créé deux stream un output et un input mais lorsque j'ai écrit tout le fichier a été écrasé par l'écriture!
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 9 juil. 2009 à 09:32
ce type de sérialisation n'est pas vraiment prévu pour faire de la recherche. Tu vas être obligé de charger toutes les données, de les modifier et de les écrire dans leur ensemble.
Si tu veux faire de la recherche soit tu regardes du côté des fichiers XML (xpath, jdom ...) soit côté base de données