Eclipse не будет читать конфигурационный файл - PullRequest
2 голосов
/ 16 мая 2011

У меня есть веб-проект Eclipse. У меня есть файл с именем deploy.properties в корневом каталоге, который, кажется, не читается. У меня есть ощущение, что мне может понадобиться добавить файл в «путь сборки» (например, в jar-файл), но это всего лишь предположение, когда я пытаюсь это сделать, нет возможности добавить файлы в путь сборки, чтобы заставляет меня думать, что я ошибаюсь.

Это строка 89 props.load(stream);

Моя трассировка стека выглядит так:

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 

И класс выглядит так:

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;
}
}

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

Имейте в виду, что при чтении файлов в вашем проекте eclipse местоположение по умолчанию находится в вашем исходном каталоге (если это веб-приложение, которое позже будет преобразовано в ваш каталог классов). Поэтому я советую переместить файл из корневого каталога проекта в каталог «src» и повторить попытку.

0 голосов
/ 16 мая 2011

Метод Dao.class.getResourceAsStream (fileName) возвращает значение null в качестве входного потока, если целевой файл не существует в пути к классам, поэтому NullPointerException.

Вы должны либо перехватить его (теперь вы только ловите IOException), либо протестировать поток ввода перед вызовом props.load (stream) для null;

Теперь, какой корневой каталог вы имеете в виду? Системный корень, исходный корень приложения, рабочий каталог приложения? Системный корень был бы довольно плохим местом для размещения ваших конфигурационных файлов.

Обратитесь к нему с помощью "deploy.properties" (без косой черты в начале) и поместите его в корень вашего пути к классам ("classes", "bin" - или как вы его называете).

Если вы поместите его на уровне пакета по умолчанию вашего исходного каталога - либо в исходном, либо в каталог, который вы добавили в качестве исходного каталога, он будет скопирован в classpath во время компиляции следующим образом:

/app
  /src
  /config
    deploy.properties 

и теперь добавьте каталог конфигурации в проект в качестве исходного каталога.

...