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 :

random access file et fonction write


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 181
    Par défaut random access file et fonction write
    Bonjour,
    Dans l'un de mes programmes j'utilisais un buffered reader sur un fichier texte. Cependant lorsque je lis une certaine chaine je dois écrire dans ce même fichier. Existe-t-il une classe qui fasse reader et writer? J'ai utilisé RandomAccessFile.

    Cependant j'ai des problèmes d'utilisation pour la fonction write ce qui perturbe donc l'éxécution du programme. Il n'y a pas d'erreur d'execution ni de compilation mais ma chaine n'est pas écrite. Quelqu'un aurait une idée?

    J'ouvre mon fichier en mode rw pourtant.
    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut
    Salut,

    C'est peut-être un pb de buffer, tu peux essayer avec ça "rws"

    "rws" Open for reading and writing, as with "rw", and also require that every update to the file's content or metadata be written synchronously to the underlying storage device.

    Trouvé ici : http://java.sun.com/j2se/1.4.2/docs/...ccessFile.html

    Eric

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 181
    Par défaut
    j'avais déjà essayé sans succès cela est très bizarre j'ai bien mis des try / catch et il n'en résulte aucune erreur

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 181
    Par défaut
    bon voici le code complet de ma fonction :
    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
    	public void majFichier(String chaine,String numArret, String fic)
    	{
    		// Sauvegarde du numéro de point
    		String num = "";
     
    		// Ligne lue
    		String chaineLue = "";
     
    		// Déclaration BufferedReader
    		RandomAccessFile flotLecture = null;
     
    		boolean trouve = false;
     
    		// Création nouveau fichier avec la chaîne en paramètres
    		File fichier = new File(fic);
     
    		// Tentative de création du buffered reader
    		try
    		{
    			// Création avec un file reader sur notre fichier
    			flotLecture = new RandomAccessFile(fichier,"rw");
     
    		}
     
    		// Si échec lors de la création
    		catch (FileNotFoundException e)
    		{
    			// Affichage de l'erreur
    			e.printStackTrace();
    		}
     
    		// Tentative de lecture d'une ligne
    		try 
    		{
     
    			// Boucle de parcours du fichier
    			while (((chaineLue = flotLecture.readLine()) != null) && (trouve == false))
    			{
     
    				System.out.println(chaineLue);
     
    				// Test si la ligne contient la séquence cherchée
    				if (chaineLue.contains(chaine) && (trouve == false))
    				{			
     
    					// Récupération du numéro de point
    					String [] sequence = chaineLue.split("\t");
    					num = sequence[0];
     
    					// Test si on se situe sur le bon point
    					if (num.equals(numArret) && (trouve == false))
    					{				
     
    						System.out.println("Chaine trouvée");
     
     
    						flotLecture.writeChars("Test ecriture");
    						trouve = true;
     
    					}
    				}
     
    			}
     
     
    		} 
     
    		// Si problème lors de la lecture de la ligne
    		catch (IOException e) 
    		{
    			// Affichage
    			e.printStackTrace();
    		}
     
    		// Fermeture
    		try {
    			flotLecture.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    	}
    Il est bien commenté donc la compréhension ne devrait pas poser de problèmes. Pas de soucis du coté de l'éxécution sauf que rien n'est écrit dans mon fichier lorsque je trouve la chaine

    Le fichier texte est de cette forme (le premier nombre est le numéro de point) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nombre<tab>nombre<tab>nombre
    nombre<tab>nombre<tab>nombre
    nombre<tab>nombre<tab>nombre
    Si quelqu'un a un petit peu de temps pour regarder cela ca serait vraiment tres gentil.
    Merci d'avance

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut
    Je viens de faire un test,

    mon fichier

    D B C
    A E F
    numArret = "A".
    Mon fichier est bien modifié :
    D B C
    A E F T e s t e c r i t u r e

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 181
    Par défaut
    as tu essayé avec d'autres lignes? par exemple
    en cherchant toujours le A bien sur

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut
    Ca fonctionne également.

    Bien sûr la dernière ligne est remplacée par la chaîne "Test ecriture", cela n'est peut-être pas le fonctionnement que tu attends mais en tout cas, l'écriture du fichier fonctionne...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 181
    Par défaut
    alors la je t'avoue que je n'y comprends rien parce que de mon coté il n'y a aucune écriture
    concernant le fonctionnement je souhaiterai remplacer le dernier nombre par test ecriture (ou une autre chaine).
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    D B C
    A E Test Ecriture
    mais cela ne doit pas etre très compliqué apparament, j'avais commencé à y réfléchir un peu.

    par contre il faut que je règle ce problème d'écriture dans le fichier car la je ne vois pas trop d'où mon problème peut venir, surtout qu'il marche chez toi

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut
    Etant donné que cela fonctionne chez moi et que ca ne marche pas chez toi même avec l'option "rws" je ne vois pas trop la cause de l'erreur non plus.

    Tu utilises quelle version du JDK? moi JDK 1.5.0_01 avec Eclipse pour compiler/lancer le programme...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 181
    Par défaut
    bonsoir
    bon j'ai réglé dans un premier temps le problème de l'écriture. J'avais en effet ouvert un file writer sur le même fichier par mégarde.
    Aurais tu a tout hasard une solution pour obtenir ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    D B C
    A E Test Ecriture
    Car toutes les solutions que j'ai essayé ne fonctionnent pas, je perds soit un bout de la ligne écrite avant, soit un bout de la ligne écrite après, soit les deux

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 181
    Par défaut
    A mon avis cela doit venir du seek de mon random access file mais honnetement je ne sais plus ou chercher.
    A force de tout essayer on commence à faire n'importe quoi

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut
    Salut,

    Je pense que ton seek n'est pas en cause.
    En fait, la fonction write remplace les caractères existant par les nouveaux. Si on se trouve à la fin du fichier, il les ajoute...

    Donc pour le moment, la seule solution que je vois est de lire la fin de ton fichier puis concatèner ta phrase avec ce tu viens de lire. Mais si le fichier est volumineux, cela risque de ne pas avoir de bonne perf.

    Eric

Discussions similaires

  1. Random Access File
    Par elghadi_mohamed dans le forum Langage
    Réponses: 4
    Dernier message: 07/11/2007, 18h59
  2. Réponses: 4
    Dernier message: 18/12/2006, 21h43
  3. Saut de ligne dans la fonction write
    Par zmaster dans le forum Delphi
    Réponses: 2
    Dernier message: 09/12/2006, 20h17
  4. [C#][ACCESS] éxécution de fonction
    Par ALCINA dans le forum C++/CLI
    Réponses: 3
    Dernier message: 30/11/2006, 15h52
  5. Réponses: 1
    Dernier message: 01/09/2006, 11h02

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