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

avec Java Discussion :

RandomAccessFile aucune sortie


Sujet :

avec Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut RandomAccessFile aucune sortie
    Bonjour,

    Mon programme ne donne aucune sortie, pourtant il compile bien.

    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
    import java.io.*;
     
    public class Randomaccess1 
    {
      public static void main(String[]args)throws IOException
      {
          RandomAccessFile raf=new RandomAccessFile("random.text","rw");
          try
          {
              Writer out=new OutputStreamWriter(new FileOutputStream(raf.getFD()),"UTF-8");
              out.write("Programing in C");
              out.flush();
              raf.seek(12);
              out.write("Java");
              out.flush();
          }
          finally
          {
              raf.close();
          }
      }
    }
    Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    On ne mélange pas RandomAccessFile et OutputStream sur le même fichier en même temps. Les résultats sont imprévisibles.

    Cela compile parce que ce sont des objets comme les autres et que le compilateur ne peut pas savoir qu'il ne faut pas s'en servir comme ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    pouvez vous m'aider svp
    je suis complétement perdu dans ce randomaccessfile

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    - Tu veux pouvoir naviguer dans le fichier en cours de lecture/écriture, donc RandomAccessFile est le bon choix. Cela n'est pas possible avec des OutputStream ou des Writer.

    - Tu veux écrire du texte en UTF-8. Malheureusement RandomAccessFile n'offre pas de moyen direct d'écrire de l'UTF-8. En revanche il propose des manières d'écrire des octets. Donc tu as besoin de transformer des textes en octets en UTF-8.

    - byte[] bytes = "Programing in C".getBytes("UTF-8"); te permet de créer un tableau de bytes qui contient les octets du texte en question.

    - raf.write(bytes) écrit ces octets dans le fichier sans problème.

    - pour revenir en arrière, le raf.seek() que tu fais fonctionne parfaitement. Le 12 me semble très étrange, par contre. Je me serais attendu à 14.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    vous voulez que j'écris comme ça:
    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
     
     
    import java.io.*;
    public class Randomaccess1 
    {
      public static void main(String[]args)throws IOException
      {
    	  RandomAccessFile raf=new RandomAccessFile("random.text","rw");
    	  try
    	  {
    		  //Writer out=new OutputStreamWriter(new FileOutputStream(raf.getFD()),"UTF-8");
              //raf.write(bytes);
    		  byte[]bytes="Programing in C".getBytes("UTF-8");
    		  //out.write("Programing in C");
    		  raf.write(bytes);
              //out.flush();
              raf.seek(14);
              //out.write("Java");
              raf.writeBytes("Java");
              raf.write(bytes);
              //out.flush();
    	  }
    	  finally
    	  {
    		  raf.close();
    	  }
     
      }
    }
    mais toujours aucun output
    merci votre aide

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par domxaline Voir le message
    vous voulez que j'écris comme ça:
    Non...

    - J'ai pas le souvenir de t'avoir parlé de writeBytes(), qui n'est pas spécialement mauvais mais c'est un peu idiot de mélanger les write() et les writeBytes() : il faut en choisir un des deux et n'utiliser que celui-ci.

    - J'ai pas non plus le souvenir d'avoir recommandé d'écrire deux fois la même chose. La variable bytes n'a pas changé entre les deux raf.write(bytes);. Ça veut rien dire donc.

    Citation Envoyé par domxaline Voir le message
    mais toujours aucun output
    Chez moi ça produit un fichier nommé random.text et qui contient Programing in JavaPrograming in C. Ça veut dire quoi pour toi, "aucun output" ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    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
     
    import java.io.*;
    public class Randomaccess1 
    {
      public static void main(String[]args)throws IOException
      {
    	  RandomAccessFile raf=new RandomAccessFile("random.text","rw");
    	  try
    	  {
    		  byte[]bytes="Programing in C".getBytes("UTF-8");
    		  raf.write(bytes);
                      raf.seek(14);
                      raf.write("Java");
    	  }
    	  finally
    	  {
    		  raf.close();
    	  }  
      }
    }
    j'ai pb avec la ligne "raf.write("Java");
    j'ai un message
    The method write(int) in the type RandomAccessFile is not applicable for the arguments (String)
    at Randomaccess1.main(Randomaccess1.java:19)

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ah, mince. Et il se passe quoi, si, à la place de raf.write("Java");, tu fais exactement la même chose que 3 lignes plus haut ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    j'ai un message
    The method write(int) in the type RandomAccessFile is not applicable for the arguments (String)
    at Randomaccess1.main(Randomaccess1.java:19)

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Man. 3 lignes plus haut. Juste 3 lignes plus haut, tu as écrit "Programing in C" et ça marche très bien.
    Pourquoi tu fais autrement quand tu veux écrire "Java" ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    je ne comprend pas
    la quel ligne vous parlez svp

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    ... Je parle de la ligne qui contient "Programing in C" -_-°
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    celui ci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    out.write"Programming in C");
    ou cette ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    byte[]bytes="Programing in C".getBytes("UTF-8");

  14. #14
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Celle qui est utilisée pour un RandomAccessFile, la seconde, donc -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    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
    import java.io.*;
    public class Randomaccess1 
    {
      public static void main(String[]args)throws IOException
      {
    	  RandomAccessFile raf=new RandomAccessFile("random.text","rw");
    	  try
    	  {
    		  Writer out=new OutputStreamWriter(new FileOutputStream(raf.getFD()),"UTF-8");
              
    		  byte[]bytes="Programing in C".getBytes("UTF-8");
    		   raf.write(bytes);
                       raf.seek(14);
                        raf.write("Java");
             	  }
    	  finally
    	  {
    		  raf.close();
    	  }	  
      }
    }
    j'ai erreur suivante
    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The method write(int) in the type RandomAccessFile is not applicable for the arguments (String)

    at Randomaccess1.main(Randomaccess1.java:20)

  16. #16
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Oui, tu l'as déjà dit, je t'ai déjà répondu.

    Je ne te donnerai pas le code complet, tu sais. Et apparemment personne d'autre ne le fait, donc tu n'as pas le choix : tu dois essayer de comprendre des trucs au lieu de copier/coller au hasard.

    Essaie de supprimer cette ligne qui ne compile pas, et regarde le résultat. Ça marche ? Bien. Alors maintenant, pour ajouter le mot "Java", comment faire ? Exactement de la même façon que tu as mis les mots "Programing in C", peut-être ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    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
     
    import java.io.*;
    public class Randomaccess1 
    {
      public static void main(String[]args)throws IOException
      {
    	  RandomAccessFile raf=new RandomAccessFile("random.text","rw");
    	  try
    	  {
    		  Writer out=new OutputStreamWriter(new FileOutputStream(raf.getFD()),"UTF-8");
     
    		  byte[]bytes="Programing in C".getBytes("UTF-8");
     
     
    		  raf.write(bytes);
     
              raf.seek(14);
              byte[]bytes1="Java".getBytes("UTF-8");
              raf.write(bytes1);
    	  }
    	  finally
    	  {
    		  raf.close();
    	  }
     
      }
    }
    toujours aucun output

  18. #18
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 978
    Points
    7 978
    Par défaut
    Cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Writer out=new OutputStreamWriter(new FileOutputStream(raf.getFD()),"UTF-8");
    ne sert a rien et dev(r)ait être enlevée.

    Sinon ben, "chez moi" ton programme il marche comme il faut.

    Le fichier contient bien la phrase attendue : "Programing in Java".

    Mais bon par "toujours pas d'output", tu parles bien de l'écriture dans le fichier la ??
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 43
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par domxaline Voir le message
    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
     
    import java.io.*;
    public class Randomaccess1 
    {
      public static void main(String[]args)throws IOException
      {
    	  RandomAccessFile raf=new RandomAccessFile("random.text","rw");
    	  try
    	  {
    		  Writer out=new OutputStreamWriter(new FileOutputStream(raf.getFD()),"UTF-8");
     
    		  byte[]bytes="Programing in C".getBytes("UTF-8");
     
     
    		  raf.write(bytes);
     
              raf.seek(14);
              byte[]bytes1="Java".getBytes("UTF-8");
              raf.write(bytes1);
    	  }
    	  finally
    	  {
    		  raf.close();
    	  }
     
      }
    }
    toujours aucun output
    Hello,

    Ton code fonctionne parfaitement, peut être que tu ne trouve pas le fichier random.text ?
    essaye de lui ajouter un path comme ça tu sais ou il ce trouve

    c:\\random.text par exemple

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    Par défaut
    mon fichier se trouve dans ce location
    "G:\Utilisateurs\xavier\random.txt"

    alors je dois écrire ainsi n'est ce pas?
    RandomAccessFile raf=new RandomAccessFile("G:\Utilisateurs\xavier\random.txt","rw");

    si oui pourquoi j'ai aucun output svp

Discussions similaires

  1. Aucune sortie générée - Problème de cron - wget
    Par sandddy dans le forum Administration système
    Réponses: 1
    Dernier message: 25/03/2009, 18h24
  2. Aucune sortie avec wxString
    Par abcdefg dans le forum wxWidgets
    Réponses: 2
    Dernier message: 21/01/2009, 09h39
  3. [VS 2005] Aucune sortie dans la Console
    Par Ouark dans le forum ASP.NET
    Réponses: 2
    Dernier message: 28/02/2008, 11h25
  4. [Imprimante] Aucune couleur à la sortie
    Par Opérateur dans le forum Périphériques
    Réponses: 7
    Dernier message: 03/02/2007, 18h29
  5. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28

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