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 :

Problème d'espace dans un nom de fichier


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Par défaut Problème d'espace dans un nom de fichier
    Bonjour à tous,


    dans un petit logiciel que je programme l'utilisateur peut choisir un fichier via un jchoosefile, le chemin d'accès est stockée dans une variable "newDoc"

    cependant lors de la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("cmd /C start " + newDoc);
    j'ai pu constater que si le nom du fichier contenant un espace, par exemple : Annexe 1.docx (ou pdf, doc, xls, xlsx), document plein de blabla, la commande plante.

    j'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec("cmd /C start " + "\"" + newDoc + "\"");
    ça ne marche pas, ça provoque juste l'ouverture de la fenêtre cmd dos mais ça n'ouvre pas le document.

    Une idée de comment je peux résoudre ce souci?

    Merci à tous

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le premier paramètre entre guillemets de la commande start est le titre de la fenêtre. Tu dois voir que la fenêtre qui s'ouvre a pour titre le nom de ton fichier. Il faut donc insérer entre start et le nom de ton fichier entre guillemet, un titre en guillemet (au minimum "").

    Il est plus simple de gérer ce genre d'aspect en utilisant la méthode qui utilise un tableau en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String[] command = {"cmd", "/C",  "start", "\"\"", newDoc};
    Runtime.getRuntime().exec(command);
    Ici, peu import que newDoc contienne des espaces ou non : ce sera géré automatiquement.

    Remarque que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String[] command = {"cmd", "/C",  newDoc};
    Runtime.getRuntime().exec(command);
    fonctionne aussi.


    Par ailleurs, il est te sera plus simple de gérer des appels externe par la classe ProcessBuilder (au lieu de Runtime.getRuntime().exec()), notamment en ce qui concerne les traitements des flux.


    [Edit]Effectivement comme le dit @adiGuba, pour ouvrir un doc, il vaut mieux utiliser Desktop.open()
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    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,


    Déjà il faut éviter d'utiliser Runtime.getRuntime() et privilégier ProcessBuilder qui découpe explicitement les paramètres et surtout de mieux gérer les flux d'E/S.
    (actuellement il est possible qu'un programme se bloque vu que tu ne traite pas les flux)
    Ce qui donnera pour ta commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	new ProcessBuilder("cmd", "/C", "start", file.toString())
    		.inheritIO() // utilise les flux d'entrée/sorties vers ceux du programme appelant
    		.start(); // lance le process

    Mais çà ne marche toujours pas : ton problème ne vient pas de Java mais de ta commande.
    Même si tu la tapes directement en ligne de commande cela ne marche pas.

    start attend en premier paramètre le nom de la fenêtre.
    Normalement ce paramètre est optionnel mais le fait de ne pas le spécifier peut poser problème : on dirait que si le premier paramètre contient un espace il considère que c'est le titre de la fenêtre et non pas le nom de la commande à exécuter...

    Il faut donc spécifier un titre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	new ProcessBuilder("cmd", "/C", "start", " ", file.toString())
    		.inheritIO()
    		.start();


    Mais dans tous les cas le meilleur moyen pour ouvrir un fichier reste d'utiliser la classe Desktop, et en plus c'est portable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	public static void openDocument(File file) throws IOException {
    		if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Action.OPEN)) {
    			Desktop.getDesktop().open(file);
    		} else {
    			throw new IOException("Desktop is not supported");
    		}
    	}

    a++

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Par défaut
    merci beaucoup, me voilà donc un peu moins bête et je peux continuer le développement de mon outil de comparaison de document

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

Discussions similaires

  1. [Python 3.X] Problème d'espace dans les noms de fichier
    Par F6AAP dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 26/07/2016, 13h11
  2. Réponses: 2
    Dernier message: 26/01/2012, 15h43
  3. suppression des espaces dans les noms de fichiers
    Par menuge dans le forum Général Python
    Réponses: 8
    Dernier message: 22/10/2006, 12h01
  4. [BATCH] Espaces dans les noms de fichiers :|
    Par andlio dans le forum Windows
    Réponses: 1
    Dernier message: 03/08/2006, 03h42
  5. Espace dans un nom de fichier
    Par pouli dans le forum Langage
    Réponses: 5
    Dernier message: 27/07/2006, 12h26

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