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
Ceci ne crée pas de fichier "ls.toto"
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(); } }
Je peux m'amuser à créer un fichier avec du code java, le code se transforme alors en:
Superbe tout semble fonctionner
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(); } ...
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
Partager