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 :

[Windows][Fichier] problème de "/"


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut [Windows][Fichier] problème de "/"
    Bonjour,

    je viens de m'apercevoir que dans un bout de code je vais un truc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    File f= new File("/monDossier/monFichier");
    Apparrement ca marche. Mais le fichier est toujours sur c:

    Je me demandais que se passe t il si le fichier passe sur d: ?
    Est-ce que Java considere que / est tjrs c: ?

    Pour resumer la question est:
    Quel est le comportement new File("/") sous windows?


    merci d'avance.

  2. #2
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Euh, tu es sûr que ça marche, moi si je mets pas C: , le fichier n'est pas trouvé
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  3. #3
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    ( System.out.println(f.exists()); )
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  4. #4
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Oui je suis sur, mon fichier est bien lu par l'appli.

    C'est une servlet qui lit un fichier PDF et le recopie dans la reponse.

  5. #5
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Tu peux utiliser le System.getProperties(Path.Separator) pour que ce soit portable de genre d'instructions...

    / va t'amener à la racine de ton lecteur par défaut. / étant le séparateur sous systèmes Unix, il n'y a pas de séparation au niveau lecteurs réseau (si je ne m'abuse... mes cours Linux sont loins...) donc / --> racine et sous windows, la racine c'est le lecteur réseau par défaut (souvent nommé c)
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  6. #6
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    donc un new File("/");

    est equivalent à new File("c:/") sous windows.

    oki merci

  7. #7
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Ce qui est bien je trouve c'est de toujours tester par soi-même

    Là c'est typiquement quelque chose où tu peux tester pour voir!! C'est pas une question ou tu es bloqué ou que tu as absolument besoin de l'aide de quelqu'un...

    Essaie!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    File f = new File("/");
    //teste f
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  8. #8
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par gronono
    donc un new File("/");

    est equivalent à new File("c:/") sous windows.

    oki merci
    NON: File("/") n'est pas équivalent à File("c:/") sous windows

    Sous windows, chaque processus à un "disque courant" qui peut être c:, d: ou g:.

    Dans ton cas, ton processus à comme "disque courant" c:. Donc il est préférable que tu donnes le chemin absolu de ton fichier.
    Bien le bonjour chez vous
    Jowo

  9. #9
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Citation Envoyé par jowo
    Donc il est préférable que tu donnes le chemin absolu de ton fichier.
    C'est ce que j'avais l'intention de faire. Je venais juste de m'apercevoir que je faisais un new File("/..."), le nom du fichier est contruit dynamiquement en fonction de parametres.

    Citation Envoyé par jowo
    Sous windows, chaque processus à un "disque courant" qui peut être c:, d: ou g:.
    En fait mon code est dans une servlet donc il est executer par le serveur d'appli.
    Or si mon serveur d'appli est sous c: ou d:, ca marche quand meme et donc donne tjrs c: .

    C'est ca que je ne comprend pas.

  10. #10
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Un des interets de java, c'est la portabilité des applications que tu produits. Aujourd'hui tu veux faire tourner ton serveur d'application sous windows, donc te dis que tu n'as pas de soucis, le fichier que tu veux lire sera toujours la ou tu pense qu'il va etre, c'est a dire sur le disque C: a tel endroit... mais demain ou dans cinq ans, ton appli sera toujours utilisé, et pour diverses raisons, le serveur d'appli est migré sur un autre systeme... ton appli n'est plus utilisable, ca fait perdre du temps a tout le monde.... alors qu'au moment du developpement, il te suffisait d'utiliser certains outils qui permettent de faire une arbstraction du systeme.

    Donc :

    Citation Envoyé par pollux007
    Tu peux utiliser le System.getProperties(Path.Separator) pour que ce soit portable de genre d'instructions...
    En plus, ca evite de te poser tes questions pas vraiment utile...

  11. #11
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Réponse directe à benratti :
    Le probleme n'ai pas là. J'ai remarqué le bug et je l'ai corrigé.

    Ce qui m'étonne c'est juste le comportement du premier "/" (donc pas du Path.Separator)

    L'élément "/" represente ici la racine du systeme de fichier.

    Je pensais que la racine sous windows était le lecteur où etait installé windows (c: dans la plus part des cas).
    Mais d'apres jowo c'est faux.
    Or je remarque c'est vrai.

    Quelle est la vérité ? Que représente la racine sous windows pour java ?

  12. #12
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2006
    Messages : 380
    Points : 314
    Points
    314
    Par défaut
    Pour ma part ton interrogation est bonne.
    J'ai jamais voulu me la poser alors je n'utilise que des chemins relatifs...
    Solution de facilité !!!

  13. #13
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    merci de ton soutien.

  14. #14
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    T'as essayé de mettre ton projet sous un autre lecteur?
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  15. #15
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Citation Envoyé par pollux007
    T'as essayé de mettre ton projet sous un autre lecteur?
    Qu'entends tu par projet ?

    Moi j'ai une appli sur un serveur d'appli.
    le serveur d'appli est sur c: et le fichier est sur c: => ca marche.

    Mon collegue à la meme appli sur le meme serveur (meme version, meme config)
    son serveur d'appli est sur d: et le fichier est sur c: => ca marche.

    Donc j'en conclut que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new File("/toto/titi.ext");
    Pointe toujours sur le fichier c:\toto\titi.ext


    oui je sais il faut faire : new File("c:/toto/titi.ext") pour ca marche sous tous les os.
    Utilité du System.getProperties(Path.Separator) ??

  16. #16
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import java.io.File;
     
    public class Test
    {
        public static void main(String [] args)
        {
        	File f = new File("/truc");
        	System.out.println(f.exists());
        }
    }
    Et bien sûr ça affiche true uniquement quand le fichier est sur le même disque que le programme.
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  17. #17
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    ok je viens de jouer ton test en affichant le chemin absolu à la place de exists

    si je suis sur c: ca me donne c:\truc
    si je suis sur p: ca me donne p:\truc

    donc la theorie de jowo est bonne.

  18. #18
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Citation Envoyé par gronono
    ok je viens de jouer ton test en affichant le chemin absolu à la place de exists
    tu m'étonnes j'aurais plus y penser
    Ignorer c'est aussi croire que l'on sait.
    Merci d'essayer d'écrire correctement.
    Pas de questions techniques par MP SVP.

  19. #19
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    C'est normal...

    Sous Windows, Java remplace automatiquement les / par des \ dans les noms de fichiers, donc le chemin "/truc" devient "\truc". Et c'est un chemin valide sous Windows (et même sous DOS d'ailleurs), où le \ initiale représente la racine du disque courante.

    Vous pouvez vérifier cela sous une console Ms-Dos, la commande suivante :
    Affichera le contenu de la racine du disque sur lequel vous vous trouvez...

    a++

  20. #20
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Ok je viens de comprende:

    jowo avais raison.
    La racine est le lecteur dans lequel on execute l'application.
    Donc c'est le lecteur qui correpond à new File(".").getAbsolutePath().

    En fait quelque soit le lecteur où etait installe le serveur, je le lance en faisant un cmd et run.bat.
    Donc je lancais le serveur à partir d'un dossier du lecteur c:.

    Donc le new File("/toto/titi.ext") pointé toujours sur c:

    Merci de vos reponses

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Requete fichier .js VBA EXCEL REALTIME FX QUOTES
    Par tiuse75016 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/05/2010, 18h51
  2. Réponses: 3
    Dernier message: 24/03/2009, 14h08
  3. [OS WINDOWS] Fichier de commande
    Par guenfood dans le forum Windows
    Réponses: 1
    Dernier message: 01/06/2006, 21h39
  4. Réponses: 2
    Dernier message: 15/04/2004, 15h44

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