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

Entrée/Sortie Java Discussion :

[Problème utilisation de RandomAccessFile]


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par défaut [Problème utilisation de RandomAccessFile]
    Bonjour,


    Après avoir regarder sur le forum pour savoir comment écrire dans un fichier
    à un endroit donné, j'ai trouvé la classe RandomAccessFile.

    Mon soucis c'est que je n'arrive pas à l'expoiter correctement cette classe.

    J'ai un fichier contenant par ex :

    123456789
    ABCDEFGHIJ
    11111111111

    et je voudrai ecrire ajouter OK dans 11111111111 pour donner -> 11111 OK 111111

    Mon deuxième problème est l'ajout d'une nouvelle n'importe ou dans le 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
     
     
    	 int cpt = 0;
    		String ligne;
     
    		try {
    			RandomAccessFile f = new RandomAccessFile("fichier.txt", "rw");
     
    			while ((ligne = f.readLine()) != null) {
     
    				if(cpt == 2){
    					f.seek(2);
    					f.writeBytes("OK");
    				}
     
    				cpt++;
    			}
    			f.close(); 
     
    		}catch (IOException e) {
     
    		}
    Pourriez vous m'aider svp ?

    Snoopy_2006

  2. #2
    Membre Expert
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Par défaut
    Bonjour et bienvenue sur developpez.com,

    Attention, lorsque vous écrivez
    vous vous placez sur le 3ème octet du fichier (il me semble que seek commence sa numérotation à 0).

    Vous pouvez regarder du coté de la méthode getFilePointer() pour vous aider

    Sinon, dans un RandomAccessFile, on ne peut pas insérer des données. Enfin on ne peut pas le faire facilement en tous cas. La méthode write se contente de réécrire.

    Pour ce qui est de votre deuxième question je ne suis pas sur d'avoir compris.

    Bon courage

    PS : pensez à relire vos messages avant de poster

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par défaut
    Oui j'aurai du relire mon message.

    En fait dans la deuxième question : Je voudrai savoir comment faire et quoi utiliser pour inserer une nouvelle ligne dans mon fichier, cette ligne peut être située n'importe ou dans le fichier.

    Fichier ori :

    123456789
    AAAAAAAA
    KKKKKKKKK

    Fichier modif :

    123456789
    AAAAAAAA
    OOOOOOO
    KKKKKKKKK

    Sinon dans ma première question , comment faire autrement qu'avec randomAccessFile pour ajouter des données à un endroit particulier ?

    Merci
    snoopy_2006

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu ne peux pas "insérer" des données, mais seulement les "remplacer".

    En fait pour insérer des données la seule solution est de charger le fichier en mémoire (éventuellement par morceau s'il est trop grand) et de le réécrire complètement...

    Et ceci est vrai quelque soit le langage.

    a++

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par défaut
    Excuser moi de vous embêter encore mais ne faisant pas de java depuis longtemps j'ai un peu de mal même avec l'api.

    Alors est-ce que quelqu'un aurait un bout de code qui réponde à mon problème et ainsi etudier la manière dont c'est fait ?

    Merci.

    snoopy_2006

  6. #6
    Invité de passage
    Inscrit en
    Février 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 1
    Par défaut s@lo tsdi1
    voila un ptit exer ke j'espr il peu vos aidé
    import java.io.* ;
    import java.util.* ;

    public class Exercice
    {
    public static void main(String[] args) throws IOException
    {
    File fichier = new File("employe.txt") ;

    RandomAccessFile donnee = new RandomAccessFile(fichier, "rw") ;
    int numero = 0 ;
    int choix = 0 ;
    int compteur = 1 ;
    double moyenne = 0 ;
    double newSalaire = 0 ;
    boolean sortie = false ;

    donnee.writeInt(compteur) ;
    donnee.writeChar(' ') ;
    donnee.writeUTF("Patolachi") ;
    donnee.writeChar(' ') ;
    donnee.writeUTF("Marcel") ;
    donnee.writeChar(' ') ;
    donnee.writeDouble(5500.00) ;
    donnee.writeChar('\n') ;

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in)) ;



    do
    {
    do
    {
    try
    {
    System.out.println("Menu") ;
    System.out.println("====\n") ;
    System.out.println("1. Afficher les donnees") ;
    System.out.println("2. Calculer le salaire moyens") ;
    System.out.println("3. Ajouter un employe") ;
    System.out.println("4. Modifier le salaire d'un employe") ;
    System.out.println("5. Quitter") ;
    choix = Integer.parseInt(in.readLine()) ;
    }
    catch(NumberFormatException e)
    {}
    }
    while(choix < 1 || choix > 5) ;

    switch(choix)
    {
    case 1 :
    {
    System.out.println() ;

    donnee.seek(0) ;

    for (int i = 0 ; i < compteur ; i++)
    {
    try
    {
    System.out.print(donnee.readInt()) ;
    System.out.print(donnee.readChar()) ;
    System.out.print(donnee.readUTF()) ;
    System.out.print(donnee.readChar()) ;
    System.out.print(donnee.readUTF()) ;
    System.out.print(donnee.readChar()) ;
    System.out.print(donnee.readDouble()) ;
    System.out.print(donnee.readChar()) ;
    }
    catch(EOFException e)
    {}
    }

    System.out.println() ;
    }
    break ;

    case 2 :
    {
    System.out.println() ;
    moyenne = 0 ;
    donnee.seek(0) ;

    for (int i = 0 ; i < compteur ; i++)
    {

    try
    {
    donnee.readInt() ;
    donnee.readChar() ;
    donnee.readUTF();
    donnee.readChar() ;
    donnee.readUTF() ;
    donnee.readChar() ;
    moyenne += donnee.readDouble() ;
    donnee.readChar() ;
    }
    catch(EOFException e)
    {}
    }

    System.out.println("La moyenne des salaires est de : " + (moyenne/compteur)) ;

    System.out.println() ;
    }
    break ;

    case 3 :
    {
    System.out.println() ;

    donnee.seek(donnee.length()) ;
    compteur += 1 ;

    try
    {
    donnee.writeInt(compteur) ;
    donnee.writeChar(' ') ;
    System.out.println("Entrez le nom du nouvel employe") ;
    donnee.writeUTF(in.readLine()) ;
    donnee.writeChar(' ') ;
    System.out.println("Entrez le prenom du nouvel employe") ;
    donnee.writeUTF(in.readLine()) ;
    donnee.writeChar(' ') ;
    System.out.println("Entrez le salaire du nouvel employe") ;
    donnee.writeDouble(Double.parseDouble(in.readLine())) ;
    donnee.writeChar('\n') ;
    }
    catch(EOFException e)
    {}

    System.out.println() ;
    }
    break ;

    case 4 :
    {
    System.out.println() ;

    donnee.seek(0) ;

    do
    {
    System.out.println("Entrez le numero de l'employe a qui vous voulez change le salaire") ;
    numero = Integer.parseInt(in.readLine()) ;
    }
    while(numero < 0 || numero > compteur) ;

    System.out.println("Entrez le montant du nouveau salaire") ;
    newSalaire = Double.parseDouble(in.readLine()) ;

    int numDonnee = 0 ;

    try
    {
    for (int i = 0 ; i < compteur ; i++)
    {
    numDonnee = donnee.readInt() ;

    if(numero == numDonnee)
    {
    donnee.readChar() ;
    donnee.readUTF() ;
    donnee.readChar();
    donnee.readUTF() ;
    donnee.readChar() ;
    donnee.writeDouble(newSalaire) ;
    donnee.readChar() ;
    }
    else
    {
    donnee.readChar() ;
    donnee.readUTF() ;
    donnee.readChar();
    donnee.readUTF() ;
    donnee.readChar() ;
    donnee.readDouble() ;
    donnee.readChar() ;
    }
    }
    }
    catch(EOFException e)
    {}

    System.out.println() ;
    }
    break ;

    case 5 :
    {
    System.out.println() ;
    sortie = true ;
    }
    break ;

    }
    }
    while(sortie != true) ;


    System.exit(0) ;
    }
    }
    remarke fichier.txt +l'endroit exate par exemple (d:\\fichier.txt)

Discussions similaires

  1. Problème utilisation DLL
    Par Tub-95 dans le forum MFC
    Réponses: 4
    Dernier message: 02/11/2005, 12h00
  2. [Tomcat][Spring] Problème utilisation mémoire
    Par Wutintin dans le forum Hibernate
    Réponses: 12
    Dernier message: 08/09/2005, 14h57
  3. [JSTL] [EL] Problème utilisation <c:out>
    Par XavierL dans le forum Taglibs
    Réponses: 7
    Dernier message: 14/08/2005, 20h12
  4. (Problème) Utilisation de l'API mySQL [Delphi 2005 Perso]
    Par will-scs dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/08/2005, 18h26
  5. [JAR]Problème utilisation manifest et jar
    Par doudine dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 07/01/2005, 10h21

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