Concernant l'application.fichier de propriétés et variable d'environnement

Java reconnaît avec succès le chemin dans mon application.fichier de propriétés, quand j'ai le chemin d'accès configuré comme ci-dessous:

pathToInputFile=/kcs/data/incoming/ready/
pathToInputFileProcess=/kcs/data/incoming/work/

si j'essaie d'utiliser une variable d'environnement, le programme Java ne reconnaît pas le chemin.

(la variable environnementale TOM_DATA est défini comme /kcs.)

pathToInputFile=${TOM_DATA}/data/incoming/ready/
pathToInputFileProcess=${TOM_DATA}/data/incoming/work/

puis-je utiliser une variable d'environnement à l'intérieur de l'application.fichier de propriétés?

22
demandé sur kc2001 2010-02-15 06:29:34

5 réponses

Vous pouvez mettre des variables d'environnement dans votre fichier de propriétés, mais Java ne les reconnaîtra pas automatiquement comme des variables d'environnement et ne les résoudra donc pas.

pour ce faire vous analyser les valeurs et résoudre toutes les variables d'environnement que vous trouvez.

Vous pouvez obtenir des variables d'environnement à partir de Java en utilisant diverses méthodes. Par exemple: Map<String, String> env = System.getenv();

Il y a un tutoriel de base ici: http://java.sun.com/docs/books/tutorial/essential/environment/env.html

j'Espère que c'est de l'aide.

16
répondu Tom Duckering 2010-02-15 03:37:59

la réponse de Tom Duckering est correcte. Java ne gère pas ça pour toi.

voici quelques codes utilisant des expressions régulières que j'ai écrites pour gérer la substitution de variables d'environnement:

/*
 * Returns input string with environment variable references expanded, e.g. $SOME_VAR or ${SOME_VAR}
 */
private String resolveEnvVars(String input)
{
    if (null == input)
    {
        return null;
    }
    // match ${ENV_VAR_NAME} or $ENV_VAR_NAME
    Pattern p = Pattern.compile("\$\{(\w+)\}|\$(\w+)");
    Matcher m = p.matcher(input); // get a matcher object
    StringBuffer sb = new StringBuffer();
    while(m.find()){
        String envVarName = null == m.group(1) ? m.group(2) : m.group(1);
        String envVarValue = System.getenv(envVarName);
        m.appendReplacement(sb, null == envVarValue ? "" : envVarValue);
    }
    m.appendTail(sb);
    return sb.toString();
}
14
répondu Tim Lewis 2012-03-15 17:52:57

Qui est à droite. Java ne gère pas la substitution de la valeur des variables d'environnement. De plus, Java pourrait ne pas reconnaître les variables comme $EXT_DIR. En utilisant de telles variables, vous pourriez rencontrer FileNotFoundException. Mais Java reconnaîtra les variables qui sont définies avec - D