2010-03-02 4 views
14

J'ai créé un projet web dynamique dans Eclipse. J'ai créé un fichier de propriétés dans le répertoire src:Comment accéder au fichier de propriétés à partir de l'application Web Java EE?

<project-root>/src/props.properties 

Je commence Tomcat via Eclipse en mode débogage. Maintenant, je veux lire le fichier de propriétés d'un de mes POJOs, mais j'ai une exception FileNotFoundException. Le chemin actuel semble être le chemin Eclipse.

J'ai jeté un coup d'oeil sur le web pour trouver une solution, mais aucune d'elles n'a fonctionné pour moi. Peut-être que j'ai fait quelque chose de mal. Le code est comme suit:

File file = new File("props.properties"); 
FileReader reader = new FileReader(file); 
properties.load(reader); 

Comment accéder au fichier de propriétés? Où devrait-il être situé?

Merci d'avance.

Répondre

0

Votre projet est-il configuré automatiquement? Si oui (ou vous construisez manuellement), vérifiez si props.properties apparaît dans le dossier de sortie de votre projet (dans Eclipse, il s'agit généralement d'un "bin" mais peut être WebRoot ou autre, selon la configuration de votre projet). Lorsqu'un projet est compilé, il doit copier les fichiers de configuration ainsi que les classes compilées, les JSP, etc. Cependant, je pense que les lecteurs de fichiers utilisent par défaut le répertoire personnel de la JVM pour leur source. Dans le cas d'Eclipse, cela signifie que votre fichier props.properties doit être dans le projet racine, c'est-à-dire pas le dossier "src".

22

Si son application web, alors les propriétés seront déployés vers WEB-INF/classes et peut être chargé à l'aide du chargeur de classe

InputStream in = {NameOfClassWhereThisisInvoked}.class.getResourceAsStream("/props.properties"); 
properties.load(in); 
in.close(); 

actully qui devrait fonctionner, peu importe que ce soit une webapp ou non.

Je suppose src est défini comme un dossier source

+1

Merci à tous pour répondre. J'ai oublié de mentionner que je commence tomcat via eclipse. Le fichier de propriétés est copié dans: C: \ workspace \ .metadata \ .plugins \ org.eclipse.wst.serveur.core \ tmp0 \ wtpwebapps \ WebAppName \ WEB-INF \ classes.Maintenant, j'ai une copie du fichier des accessoires dans la racine du projet et dans le dossier src, mais je ne suis pas en mesure d'y accéder de toute façon. – c0d3x

+0

le charger comme une ressource comme je l'ai montré ci-dessus devrait fonctionner – objects

+0

Où est votre classe pojo? Ce qui précède suppose qu'ils sont tous deux chargés par le même classloader – objects

3

Il y a une autre façon de le faire comme suit:

File file = new File(session.getServletContext().getRealPath("/") + "props.properties"); 

au lieu de « props.properties », vous pouvez donner un chemin par rapport à le dossier "WebContent" de votre projet d'application web eclipse.

2

ici est la bonne façon de charger le fichier de propriétés partout dans le classpath

private Properties getPropertiesFromClasspath(String propFileName) 
                   throws IOException 
{ 
    Properties props = new Properties(); 
    InputStream inputStream = 
    this.getClass().getClassLoader().getResourceAsStream(propFileName); 

    if (inputStream == null) 
    { 
     throw new FileNotFoundException("property file '" + propFileName 
     + "' not found in the classpath"); 
} 

props.load(inputStream); 
return props; 
} 

Vous pouvez créer une classe singleton pour charger les propriétés en mémoire sur l'accès première fois et ensuite les utiliser via une méthode statique. Un exemple complet de cette technologie est disponible à http://bharatonjava.wordpress.com/2012/09/12/using-properties-file-in-java-application/

+2

Vous devriez probablement expliquer pourquoi c'est mieux/quel est le compromis vs appel getResourceAsStream sur la classe plutôt que le classloader. – EdC

0

fichier Propriétés ur Kepp dans le dossier src et le code suivant suffit de lire le fichier de propriétés

**File file = new File("./src/config.properties"); 
    FileReader reader = new FileReader(file); 
    prop.load(reader); 
    System.out.println(prop.getProperty("directorypath"));** 
Questions connexes