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 :

[String] Une chaine de caractères, un chemin vers un fichier


Sujet :

Langage Java

  1. #1
    Membre régulier Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Points : 114
    Points
    114
    Par défaut [String] Une chaine de caractères, un chemin vers un fichier
    Bonjour,
    Je souhaite ouvrir un fichier en mode binaire à patir d'un chemin sous la fome d'une String.
    Voici un bout du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    				//Création du fichier
    				System.out.println("Création du fichier : \"" + "Media/"+type+"/"+new String(donnees_recues) + "\"");
    	        		DataOutputStream flux_ecriture = new DataOutputStream(new FileOutputStream("Media/"+type+"/"+new String(donnees_recues)));
    Voici le résultat lors de l'execution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Création du fichier : "Media/Photo/abc"
    java.io.FileNotFoundException: Media/Photo/abc (Is a directory)
    Donc java considère que ma chaine "Media/Photo/abc" est un dossier... Ce qui est faux.
    Pourtant, si je tape directement cette String en argument (sans passer par mes variables converties et concatenées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    				//Création du fichier
    	        		DataOutputStream flux_ecriture = new DataOutputStream(new FileOutputStream("Media/Photo/abc"));
    Ca réussi. Donc c'est ma String qui a un problème... Les conversion de types et concaténations que j'effectue doivent corrompre la chaine...
    Pour information : type est une String et donnees_recues est un byte[] de taille 1024.
    Je suis vraiement coincé là...Merci de m'aider.

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Tape ça et dis nous ce que ça t'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    File f=new File("Media/"+type+"/"+new String(donnees_recues));
    System.out.println(f.exists());
    System.out.println(f.isDirectory());
    System.out.println(f.isFile());
    System.out.println(f.getAbsolutePath());
    DataOutputStream(new FileOutputStream(f));

  3. #3
    Membre régulier Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Points : 114
    Points
    114
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ javac -d ../bin/ Depot_serveur.java
    Depot_serveur.java:75: cannot find symbol
    symbol  : method DataOutputStream(java.io.FileOutputStream)
    location: class Depot_serveur
                                    DataOutputStream(new FileOutputStream(f));
                                    ^
    1 error
    Erreur de compilation
    Mais en retirant cette dernière ligne, j'obtiens :
    Donc java considère qu'il existe, que c'est un dossier et que ce n'est pas un fichier...Dommage!
    Pourquoi?

  4. #4
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    D'après le slash que tu utilises, je présumes que ça tourne sur un unix-like.
    peux-tu faire un "ls -la" sur ce que te renvoit le "f.getAbsolutePath()" ( la ligne dont tu as omis de mentionner le résultat ).
    Je te demande ça car, je suis persuadé que tu as fait une erreur quelque part, c'est pas java qui considère que c'est un répertoire, vu que java demande ce que c'est à l'OS. Pour avoir utilisé java sur une mutitudes d'OS, des plus connus ( windaube, linux etc. sous différentes versions ) au moins connus du grand public ( MVS sur OS390-ZOS, IBM AIX etc. ), je n'ai jamais vu un tel type de comportement, même avec de vielles version de JVM....
    Peux-tu enfin nous préciser sur quel OS tu exécute ça et quelle version, ainsi que marque de JVM tu utilises ?

    EDIT Pour le dataoutputstream, j'avais oublié le début ( ligne non importante pour comprendre ton pb ) :
    DataOutputStream date=new DataOutputStream(.....

  5. #5
    Membre régulier Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Points : 114
    Points
    114
    Par défaut
    Oui je travail sur une Slackware 11.0.
    Sinon, la version de ma machine virtuelle java c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    java version "1.5.0_09"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_09-b01)
    Java HotSpot(TM) Client VM (build 1.5.0_09-b01, mixed mode, sharing)
    Aussi, je suis pas sûr d'avoir bien compris ce que tu m'a demandé mais j'ai fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ ls -la Media/Photo/abc
    -rwxrwx--- 1 yugiohjcj nobody 4 2007-02-20 19:26 Media/Photo/abc
    Voilà... Sinon je rappelle que c'est ma String qui semble avoir un problème...Elle a une taille de "1024+1024+6+1" ce qui fait 2055. Or, elle devrait faire :
    "Media/Photo/abc"->"15+1" donc 16.

    Ca vient du fait que les variables type et donnes_recues sont issues à la base d'un byte[1024] puis elles sont converties en String.
    Pourquoi ma String est considérée comme un répertoire et pas un fichier?
    Merci.

  6. #6
    Membre régulier Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Points : 114
    Points
    114
    Par défaut
    OK donc j'ai trouvé la variable qui pose le problème : type.
    Voici comment elle est initialisée plus haut dans le programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    				//Récupération du type du fichier
    				byte[] donnees_recues = new byte[1024];
    				flux_entree.read(donnees_recues);
    				String type = new String(donnees_recues);
    J'ai trouvé une petite parade, j'ai forcé la taille de la String à 5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    				//Récupération du type du fichier
    				byte[] donnees_recues = new byte[1024];
    				flux_entree.read(donnees_recues, 0, 5);
    				String type = new String(donnees_recues, 0, 5);
    Et là lorsque les données sont "Video" ou "Photo" ça marche! Mais parfois la chaine ne devra pas être égale à 5 ; par exemple lorsque les données seront "Musique", il faudra que la taille de la chaine soit forcée à 7.
    Comment arriver à regler la taille de la String en fonction de ce que contient le byte[]?
    Merci.


    PS : je crois que le reste des données de mon byte[], ce sont des 0. Donc...Si on compte le nombre de 0 dans le byte[] et qu'on les retranche à 1024... La solution est là : j'aurai la taille à donner à la String! Je me mets au boulot...

    Par contre je trouve ça pas très propre peut être avez-vous une meilleur idée?

  7. #7
    Membre régulier Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Points : 114
    Points
    114
    Par défaut
    Super ma théorie était la bonne! Problème résolu...
    N'hésitez pas à donner votre avis sur la "propreté" de ce code.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Vérifier si une chaine de caractères est présente dans un fichier
    Par jp_____ dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 23/08/2013, 10h40
  2. [DOM] Parser une chaine de caractères au lieu d'un fichier
    Par kkt8 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 27/03/2012, 10h30
  3. Réponses: 10
    Dernier message: 11/01/2007, 08h54
  4. [String] Parcourir une chaine de caractères
    Par Samanta dans le forum Langage
    Réponses: 13
    Dernier message: 20/05/2005, 10h27
  5. [String]Recherche d'une chaine de caractères dans une autre
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 3
    Dernier message: 29/07/2004, 11h51

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