Bonjour,
Je cherche à exécuter des commandes shell sous linux, à partir d'un programme java.
J'ai pu le faire grâce au code suivant :
Le problème est que si j'execute un programme à partir du shell, qui enregistre un fichier dans le répertoire courant, il est sauvegardé dans le home si j'ai lancé le par l'interface graphique; et dans le répertoire du .jar si je l'ai lancé depuis un terminal.
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 try { Process process = Runtime.getRuntime().exec(command); InputStream inputstream = process.getInputStream(); InputStreamReader inputstreamreader = new InputStreamReader(inputstream); BufferedReader bufferedreader = new BufferedReader(inputstreamreader); String line; String output = ""; while ((line = bufferedreader.readLine()) != null) { output = output + "\n" + line; } terminal terminalWindow = new terminal(output); terminalWindow.setVisible(true); } catch (IOException ex) { Logger.getLogger(mainWindow.class.getName()).log(Level.SEVERE, null, ex); errorMessage errorMessageWindow = new errorMessage(this, true, ex.toString()); errorMessageWindow.setVisible(true); }
Je voudrais laisser le choix à l'utilisateur de l'emplacement pour enregistrer ce fichier, et il faudrait donc que je puisse changer le répertoire courant utilisé par le shell.
J'ai essayé les deux méthodes suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 try { Process process = Runtime.getRuntime().exec("cd /chemin/fichier;" + command);Dans le premier cas, j'ai une exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 File f = new File("/home/sylvain/Desktop/test"); if (!(f.exists())){ if (!(f.mkdir())) System.err.println("Cannot create the new folder!"); } //Change current folder System.setProperty("user.dir", "/chemin/fichier");
Il semble qu'il ne comprend pas la commande cd.java.io.IOException: Cannot run program "cd": java.io.IOException: error=2, No such file or directory
Dans le deuxième cas, le dossier est bien créé si il n'existe pas, et System.getProperty("user.dir") renvoie bien la valeur que j'ai donné en paramètre, mais le fichier créé est toujours au même endroit, que le programme ait été lancé par un terminal ou par l'interface graphique.
Merci d'avance pour votre aide.
Partager