Je ne comprends pas réellement comment exécuter un commande unix depuis une méthode java

En effet, je n'arrive pas à rediriger vers un nouveau fichier le résultat de la commande unix utilisée

Par exemple, si je veux utiliser la commander "ls", voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
public void lsBis(String monRepertoire) {
    String cmd = "ls /"+ monRepertoire + " > /repertoireDeSauvegarde/ls.toto";
    // Execution de la commande ls
    try {
        Runtime r = Runtime.getRuntime();
        Process p = r.exec(cmd);
    } catch (IOException e) {
        System.out.println("Erreur lors de l'execution de la commande cp");
        e.printStackTrace();
    }
}
Ceci ne crée pas de fichier "ls.toto"

Je peux m'amuser à créer un fichier avec du code java, le code se transforme alors en:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
...
    //Création du fichier temporaire dans lequel sera stocké l'arborescence
    File lsFile = new File(repertoireDeSauvegarde,"ls.toto");
    try {
        lsFile.createNewFile();
    } catch (IOException e1) {
        System.out.println("Erreur lors de la création du fichier");
        e1.printStackTrace();
    }
 
    // Execution de la commande ls
    ...
 
    // Ecriture dans le fichier créé
    try {
        FileOutputStream fos = new FileOutputStream(lsFile);
	int c;
	while ((c = in.read()) != -1) {
            // Ecriture dans le fichier temporaire
            fos.write(c);
	}
	in.close();
	fos.close();
    } catch (FileNotFoundException e1){
        System.out.println("Fichier non trouvé");
        e1.printStackTrace();
    }
...
Superbe tout semble fonctionner
Cependant, pour l'écriture d'un gros fichier, l'exécution du programme prend vraiment du temps.
De plus je dois ensuite manipuler ce fichier comme lui enlever une ligne (avec la commande sed par exemple) et je suis donc obligé de repasser par la création de fichier depuis du code java. Il devient donc très contraignant (en plus de ralentir fortement le programme) de manipuler un fichier sans pouvoir utiliser la redirection ">"


J'ai donc voulu créer un petit script "ls.sh" exécutant tout bêtement "ls /monRepertoire > /repertoireSauvegarde/ls.toto"
Ce script fonctionne très bien si je le lance manuellement, mais il ne fait rien du tout s'il est exécuté depuis la méthode Java

En espérant avoir été assez clair, je vous remercie d'avance

PS: Oui je sais, utiliser des commandes unix via du java c'est mal xD
rePS: je précise que le but de mon appli n'est pas d'utiliser la seule commande "ls", mais qu'elle utilise également un script "maison" que je ne peut transcrire en java