2011-05-16 3 views
2

J'ai un projet Web Eclipse. J'ai un fichier appelé deploy.properties dans le répertoire racine qui ne semble pas être lu. J'ai le sentiment que je pourrais avoir besoin d'ajouter le fichier au "build path" (comme un pot), mais ce n'est qu'une supposition, quand j'essaye de faire cela, il n'y a pas d'option pour ajouter des fichiers au chemin de compilation afin que me fait penser que je me trompe à ce sujet.Eclipse ne lit pas un fichier de configuration

Ligne 89 est celui props.load(stream);

Ma trace de la pile ressemble à ceci:

java.lang.NullPointerException 
at java.util.Properties$LineReader.readLine(Properties.java:365) 
at java.util.Properties.load(Properties.java:293) 
at sempedia.dao.Dao.getConfigFile(Dao.java:89) 
at sempedia.dao.Dao.<clinit>(Dao.java:17) 89 

Et la classe ressemble à ceci:

public class Dao { 
private static final String configFileLocation = "/deploy.properties"; 

private static final Properties configFile = getConfigFile(configFileLocation); 

private static final String host = configFile.getProperty("mysql.host"); 
private static final String port = configFile.getProperty("mysql.port"); 
private static final String db = configFile.getProperty("mysql.db"); 
private static final String user = configFile.getProperty("mysql.user"); 
private static final String pwd = configFile.getProperty("mysql.pwd"); 

public static String getHost() { return host; } 

public static String getPort() { return port; } 

public static String getDb() { return db; } 

public static String getUser() { return user; } 

public static String getPwd() { return pwd; } 


public static Connection getCon() { 
    Connection con = null; 
    try { 
     String url = "jdbc:mysql://" + host + ":" + port + "/" + db; 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     con = DriverManager.getConnection(url, user, pwd); 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } catch (InstantiationException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
    return con; 
} 

private static Properties getConfigFile(String fileName) { 
    Properties props = new Properties(); 
    try { 
     InputStream stream = Dao.class.getResourceAsStream(fileName); 
     props.load(stream); 
    } catch (IOException e) { 
     System.err.println("Error opening configuration file"); 
     System.exit(1); 
    } 

    return props; 
} 
} 
+0

C'est effrayant. On dirait que vous faites quelque chose de très similaire à ce que je fais actuellement au travail. :) – Neil

+0

@Neil ... c'est un petit monde :) – Ankur

Répondre

2

Gardez à l'esprit que lorsque vous lisez des fichiers Dans votre projet eclipse, l'emplacement par défaut est dans votre répertoire source (s'il s'agit d'une application Web, cela se traduit plus tard dans le répertoire de vos classes). Donc, mon conseil est d'essayer de déplacer le fichier du répertoire racine du projet dans votre répertoire "src" et de réessayer.

+0

J'ai essayé ça, et malheureusement pas de chance ... ça a du sens quand même – Ankur

+0

Je n'ai aucune idée de ce que j'ai fait de mal la première fois, mais j'ai essayé à nouveau, et cela a fonctionné .... merci Neil – Ankur

+0

Content de l'entendre. :) – Neil

0

Méthode Dao.class.getResourceAsStream (nomfichier) renvoie null comme flux d'entrée si le fichier cible n'existe pas dans le chemin de classe - c'est la raison pour laquelle NullPointerException.

Vous devriez soit l'attraper (maintenant vous ne voyez que IOException) soit tester le flux d'entrée avant d'appeler props.load (stream) pour null;

Maintenant, quel répertoire racine voulez-vous dire? Racine système, racine de l'application, répertoire de travail de l'application? La racine du système serait un endroit plutôt mauvais pour mettre vos fichiers de configuration.

Adressez-le avec "deploy.properties" (sans la barre oblique au début) et placez-le dans la racine de votre classpath ("classes", "bin" - ou peu importe comment vous l'appelez).

Si vous le placez dans le niveau du package par défaut de votre répertoire source - soit dans la source, ou un répertoire que vous avez ajouté en tant que répertoire source, il sera copié dans le classpath lors de la compilation comme ceci:

/app 
    /src 
    /config 
    deploy.properties 

et ajoutez maintenant le répertoire de configuration au projet en tant que répertoire source.

Questions connexes