2010-10-11 6 views
3

J'ai une structure comme:Quel chemin relatif dois-je utiliser dans mon projet Java

 
src 
    -|com 
     -|company 
       -|Core --> JAVA class 
    -|rules --> text files 

Inside Core est une classe Java qui utilise:

BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileName))); 

Mais je ne peux pas comprendre ce que chemin relatif à utiliser. Maintenant, je l'utilise:

"..\\..\\..\\..\\rules\\rule1.txt"

J'ai aussi essayé:

"../../../../rules/rule1.txt"

Où dois-je aller mal? S'il vous plaît, aidez, Merci d'avance!

Répondre

1

Le répertoire en cours lors de l'exécution n'a rien à voir avec le package dans lequel se trouve la classe en cours. Il ne change pas.

Si votre fichier est distribué avec l'application, utilisez Class.getResourceAsStream().

2

Cela dépend de l'endroit où vous lancez, et non de la structure du package de vos classes Java. Comme le souligne @EJP, d'autres API reflètent la structure de votre package.

Un truc que j'ai utilisé dans le passé est d'avoir une ligne de code créer un fichier "SomeSillyName.txt". Et voyez où cela apparaît réellement.

Je pense que vous pourriez lancer à partir src, et donc un simple « règles/rule1.txt » fonctionnerait.

+0

Non Je ne l'ai pas essayé –

3

Cela ne fonctionne pas de cette façon. Les chemins relatifs sont par rapport au répertoire de travail de l'application en cours, pas le répertoire de la classe. Si vous voulez savoir quel est votre répertoire de travail actuel, utilisez System.getProperty("user.dir").

Une meilleure façon est d'ajouter le répertoire des règles à l'classpath puis utilisez Class#getResourceAsStream().


Une alternative serait de définir le chemin vers le répertoire des règles en quelque sorte d'autre: Vous pouvez fournir une option de ligne de commande si cela est possible ou de définir une propriété du système (par exemple java -Drules.path=/path/to/rules ..., puis lu par System.getProperty("rules.path")).

+0

'System.getProperty (" user.dir ")' affiche le répertoire racine de 'l'installation eclipse' sur ma machine, ce qui est inutile. Il serait utile d'obtenir le répertoire racine du projet eclipse. – CodeMed

+0

@CodeMed Essayez de changer le répertoire de travail dans l'onglet "Arguments" de la configuration d'exécution. – musiKk

+0

+1 Merci. Cela fonctionne quand je fais "Run As..Run on Server" dans eclipse. Mais le paramètre de répertoire de travail sera-t-il migré dans le fichier war lorsque je compilerai l'application plus tard? – CodeMed

0

Si vous utilisez un IDE comme Eclipse le répertoire de travail est par défaut le dossier racine des projets. Donc, src/rules/rule1.txt devrait fonctionner. (Ou j'ai mal compris la structure de votre dossier.)