Comment effectuer une redirection de shell (commande> output.txt) à l’aide de ProcessBuilder?

Je voulais sauvegarder une firebase database MySQL en utilisant ProcessBuilder et le caractère > n’est pas interprété comme prévu. Ceci est mon code:

 java.util.List cmd = new java.util.ArrayList(); cmd.add("mysqldump"); cmd.add("-u"); cmd.add("root"); cmd.add("-p"+password); cmd.add("DBx"); cmd.add(">"); cmd.add("DBbk.sql"); ProcessBuilder pb = new ProcessBuilder(cmd); pb.directory(new File(".")); Process p = pb.start(); p.waitFor(); BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream())); while((line = err.readLine()) != null) { System.out.println(line); } 

La sortie est la suivante:

 Avertissement: L'utilisation d'un mot de passe sur l'interface de ligne de commande peut ne pas être sécurisée.
 mysqldump: Impossible de trouver la table: ">"

Essayez ceci (en affichant simplement la partie significative de la solution):

 new ProcessBuilder("cmd", "/C", "your_command > DBbk.sql").start() 

De cette façon, vous appelez explicitement cmd . Sous Linux, vous pouvez appeler bash ou n’importe quel shell que vous utilisez.

Le générateur de processus exécute le programme directement, sans l’exécuter via une invite de commandes shell /. Par conséquent, vous n’obtenez aucune fonctionnalité intéressante du shell comme le caractère > pour la redirection. Pardon.