9
votes

Escape Whitespace dans FilePath

J'écris une petite application Java et j'ai des problèmes avec un fichier FilePath.

Je veux exécuter un fichier de commandes avec

runtime.getruntime (). EXED ("CMD / C Démarrer c: \ Program Files \ Filed \ File.bat");

Mais maintenant, Java pleure à cause de la blancheur dans le fichier FilePath.

Comment puis-je m'échapper?

EDIT:

OK, merci pour les réponses les gars. Mais je viens de courir dans un nouveau problème:

Si je commence le .bat de cette façon, cela ouvre simplement une fenêtre CMD et rien ne se passe. Mais si je déplace le .bat en C: / Dossier / sans espaces, cela fonctionne ... La .bat elle-même est bien aussi.


1 commentaires

8 Réponses :


0
votes

Je pense que cela pleure à cause de la back non évaluée slash dans votre chaîne. Citez le nom du fichier.


0 commentaires

0
votes

mettre des citations autour et citer les backslashes: xxx


1 commentaires

Cela n'a fonctionné que pour Windows, comment pourrions-nous franchir les trois plateformes sur MacOS, Ubuntu, Windows?



0
votes

entourez le filépath avec " xxx

et d'échapper correctement au \ dans le chemin aussi


0 commentaires

1
votes
Runtime.getRuntime().exec("cmd /c start \"c:/program files/folder/file.bat\"");
should work

0 commentaires

10
votes

Vous pouvez éviter tout problème comme celui-ci en utilisant le runtime # exécuté qui prend une chaîne []: xxx

de cette façon de ne pas avoir à craindre de cibler les noms de fichiers. Cependant, vous devez toujours vous soucier de cibler \ dans les noms de fichiers.


0 commentaires

1
votes

Au lieu d'utiliser Runtime.GetRuntime, il est préférable d'utiliser ProcessBuilder

De cette façon, vous pouvez avoir quelque chose comme: xxx


0 commentaires

0
votes

Vous devez échapper aux barres obliques de sorte que \\ et dans l'espace blanc Windows sont échappées avec % 20 . Je ne sais pas sur d'autres systèmes, pourrait travailler. Mais la première chose fait le \\ .


0 commentaires

1
votes

Une solution pour Windows 7 au moins:

    Runtime.getRuntime().exec("my_program_name.exe \"" + namefile+"\");


0 commentaires