2017-04-11 1 views
0

J'ai une méthode qui prend un int[] comme entrée.Lecture d'un int [] à partir du fichier de propriétés java

methodABC(int[] nValue) 

Je voudrais profiter de cette nValue à partir d'un fichier de propriétés Java

nValue=1,2,3 

Comment puis-je lire ce à partir du fichier de configuration ou dois-je conserver ce dans un format différent?

Ce que j'ai essayé est (changing the nValue to 123 instead of 1,2,3):

int nValue = Integer.parseInt(configuration.getProperty("nnValue")); 

Comment pouvons-nous faire?

+0

Vous ne savez pas si cela est en double, mais cela peut être intéressant pour vous: http://stackoverflow.com/questions/7015491/better-way-to-represent-array-in-java-properties-file – Hexaholic

+0

Si 'nVAlueString = "1,2,3"; 'vous pouvez faire:' nValueString.split (","); 'et ensuite analyser le tableau résultant. – jrook

Répondre

5

fichier Raw-propriétés est donc :) 90 `vous devez utiliser un fichier JSON à la place,

de toute façon:

si vous avez ceci:

nValue=1,2,3 

lire puis nValue, Split qui à virgule et courant/analyse en boucle int

exemple:

String property = prop.getProperty("nValue"); 
System.out.println(property); 
String[] x = property.split(","); 
for (String string : x) { 
    System.out.println(Integer.parseInt(string)); 
} 

depuis java 8:

int[] values = Stream.of(property.split(",")).mapToInt(Integer::parseInt).toArray(); 
for (int i : values) { 
    System.out.println(i); 
} 
+1

Je ne suis pas nécessairement d'accord que JSON est toujours le meilleur. C'est juste habituellement.L'appariement clé/valeur a cependant sa place. –

+0

Salut @JoPeyper, merci pour le commentaire ... bien json est une alternative à xml ... qui détruit de tels problèmes quand les listes et les tableaux sont présents dans la config –

+1

Oui, pour les listes, JSON (et XML) est mieux que les propriétés. Nous sommes d'accord! –

1

seulement et split Vous devez lire la valeur (nValue=1,2,3) sous forme de chaîne de la chaîne (avec ",") puis convertir en un tableau int[] comme indiqué ci-dessous:

//split the input string 
String[] strValues=configuration.getProperty("nnValue").split(","); 
int[] intValues = strValues[strValues.length];//declare int array 
for(int i=0;i<strValues.length;i++) { 
    intValues[i] = Integer.parseInt(strValues[i]);//populate int array 
} 

Maintenant, vous pouvez appeler la méthode en passant le tableau intValues comme indiqué ci-dessous:

methodABC(intValues); 
-2

Voici comment lire la propriété du fichier de propriété en java:

Properties prop = new Properties(); 
try { 
    //load a properties file from class path, inside static method 
    prop.load(App.class.getClassLoader().getResourceAsStream("config.properties")); 

    //get the property value and print it out 
    System.out.println(prop.getProperty("database")); 
    System.out.println(prop.getProperty("dbuser")); 
    System.out.println(prop.getProperty("dbpassword")); 

} 
catch (IOException ex) { 
    ex.printStackTrace(); 
} 
+1

Je ne pense pas que cela règle la question. –

4

Utilisez String.split et Integer.parseInt. Avec Streams vous pouvez le faire en une ligne:

String property = configuration.getProperty("nnValue") 
int[] values = Stream.of(property.split(",")).mapToInt(Integer::parseInt).toArray() 
1

Si vous utilisez Spring, vous pouvez lire des tableaux directement dans les propriétés vous (mais aussi des cartes, si vous avez besoin de données plus complexes). Par exemple. en application.properties:

nValue={1,2,3} 

et dans votre code:

@Value("#{${nValue}}") 
Integer[] nValue; 

vous pouvez utiliser nValue où vous voulez.