2013-09-03 10 views
2

J'ai ce code:chemin de fichier relatif en java

Process p = Runtime.getRuntime().exec(command.toString(), null, 
              new File("D:\\Cognity")); 

Mais ce qui est le répertoire Cognity n'est pas toujours dans D: \, il pourrait être dans C: \ etc Donc, ma question est de savoir s'il est un moyen de lui donner un chemin relatif afin que je ne devrais pas changer ce code selon le PC qui utilise le programme?

+0

Votre programme doit demander le chemin en entrée de l'utilisateur. Il n'y a aucun moyen de couvrir tous les chemins possibles. Ou, vous pouvez créer un fichier de configuration, où vous/utilisateur fournira le chemin d'accès au processus, puis le lire dans votre programme. –

+0

Le dossier 'Cognity' a-t-il un chemin relatif vers ce programme Java lui-même? – msangel

+0

Vous pouvez vérifier la nécessité d'un chemin système vers l'application – maress

Répondre

2

Comme System.getProperty("user.dir")); retourne le répertoire à partir duquel la machine virtuelle Java vous a été lancé ne peut toujours pas garantir que vous soyez dans C: \ ou D: \ Mon conseil serait de passer l'emplacement Cognity en tant -D l'argument et l'utiliser commandline comme ceci:

Process p = Runtime.getRuntime().exec(command.toString(), null, new File(System.getProperty("cognity.dir")));

+0

Cela ne fonctionne pas non plus. System.getProperty ("cognity.dir")) renvoie null. – Schadenfreude

+0

Passez-le en tant qu'argument de ligne de commande. Si vous ne l'avez pas fait, il sera nul lorsque vous essayez de le rechercher. – mickfagan

0

Bien sûr, il y a.

Appelez System.getProperty("user.dir")); pour obtenir votre répertoire actuel, et concattez le chemin relatif au résultat.

par exemple.

String path=System.getProperty("user.dir")); 
path+=realtivePath; 

EDIT:

Calrification:

Par exemple: Le programme que vous souhaitez exécuter est toujours situé à deux dossiers en arrière, puis à Temp dir.

Ainsi, le chemin relatif est ..\\..\Temp\prog.exe.

Disons que dans un ordinateur que vous avez votre programme situé dans C: \ Users \ user \ Documents \ Program, donc c'est le répertoire de travail.

Alors:

String path=System.getProperty("user.dir")); //returns the working directory 
String realtivePath="\\ ..\\..\\Temp"; //no matter what is the first path, this is the relatuve location to the current dir 
path+=realtivePath; 
//in this example, path now equals C:\Users\user\Documents\Program\..\..\Temp\prog.exe = C:\Users\user\Temp\prog.exe 
Process p = Runtime.getRuntime().exec(command.toString(), null, new File(path)); 
+0

Pourriez-vous être un peu plus clair, est-ce que relativePath doit être défini sur quelque chose ou est-ce juste String relativePath = ""; ? Et après cela, devrais-je utiliser la commande comme ceci: Processus p = Runtime.getRuntime(). Exec (command.toString(), null, nouveau fichier (relativePath)); – Schadenfreude

+0

@Schadenfreude modifié pour refléter votre question – sara

+1

Si "répertoire de travail" signifie le répertoire où le programme est exécuté, cela ne fonctionnera pas, car ce code fait partie d'un plug-in JIRA, qui fonctionne avec un dépôt git (Cognity), il n'y a donc aucune garantie que le référentiel sera dans le répertoire de travail. – Schadenfreude

0

Vous pouvez utiliser un fichier-config pour définir le chemin absolu ou vous créer ce répertoire dans un chemin relatif au fichier jar.