2011-05-06 4 views
3

J'ai du mal à utiliser Runtime.exec en Java, il semble que certaines commandes fonctionnent, alors que d'autres ne le font pas. Par exemple, si je lanceCréer un fichier avec Runtime.exec?

echo some data > data.txt 

Dans mon terminal il fonctionne très bien, mais si j'essaie d'utiliser Java pour ce faire, il ne fonctionne pas.

Runtime mRuntime = Runtime.getRuntime(); 
Process mProcess = mRuntime.exec("echo some data > data.txt"); 
mProcess.waitFor(); 

Y a-t-il une raison à cela?

+0

Outre les autres conseils, lisez et appliquez ** toutes ** les recommandations de [When Runtime.exec() ne sera pas] (http://www.javaworld.com/javaworld/jw- 12-2000/jw-1229-traps.html). –

Répondre

8

echo n'est pas une commande réelle dans le sens où il a un binaire que vous pouvez exécuter. C'est une fonction intégrée des coquilles.

Vous pouvez essayer d'exécuter un shell comme cmd.exe sous Windows ou sh sous Linux/Mac/Unix, et en faisant passer la commande à exécuter comme une chaîne .. comme en utilisant « bash », vous pouvez le faire:

modifier parce que la redirection est un peu différent en utilisant Runtime

Pour ce faire correctement la redirection, vous devriez utiliser la forme de exec qui prend String[].

Voici un exemple rapide qui fonctionne avec redirection.

public class RunTest { 
    public static void main(String[] args) throws Exception { 
     String [] commands = { "bash", "-c", "echo hello > hello.txt" }; 
     Runtime.getRuntime().exec(commands); 
    } 
} 

Mais si vous voulez juste créer un fichier, vous pouvez créer le fichier avec le propre API de Java plutôt que d'utiliser Runtime.

+0

putain, battu moi :) – Liv

+0

Merci pour votre aide, mais malheureusement, cela ne semble pas fonctionner non plus. Alors que dans le terminal, cela fonctionne bien, il ne parvient toujours pas à faire quoi que ce soit quand je l'exécute en utilisant exec. – JohnSmith1995

+0

@ JohnSmith1995 - mis à jour ma réponse, vous devez invoquer la commande un peu différemment via Java. – birryree

1

C'est parce que echo est une commande interne shell pas un programme qui peut être exécuté! Essayez d'exécuter à la place bash -c "echo some data > data.txt"