Écraser le fichier de propriétés si la valeur de ligne de commande est présent

J'ai un programme qui va lire tout de config.properties fichier si la ligne de commande ne contient pas tous les arguments en dehors de config.propriétés de l'emplacement du fichier. Ci-dessous ma config.fichier de propriétés-

NUMBER_OF_THREADS: 100
NUMBER_OF_TASKS: 10000
ID_START_RANGE: 1
TABLES: TABLE1,TABLE2

Si j'exécute mon programme à partir de l'invite de commande comme ceci-

java -jar Test.jar "C:\\test\\config.properties"

Il faut lire tous les quatre propriétés de la config.properties fichier. Mais supposons que si je suis en cours d'exécution de mon programme de ce genre-

java -jar Test.jar "C:\\test\\config.properties" 10 100 2 TABLE1 TABLE2 TABLE3

ensuite, il faut lire toutes les propriétés de l'argumentation et de remplacer les propriétés de config.fichier de propriétés.

Ci-dessous mon code qui fonctionne très bien dans ce scénario-

public static void main(String[] args) {

        try {

            readPropertyFiles(args);

        } catch (Exception e) {
            LOG.error("Threw a Exception in" + CNAME + e);
        }
    }

    private static void readPropertyFiles(String[] args) throws FileNotFoundException, IOException {

        location = args[0];

        prop.load(new FileInputStream(location));

        if(args.length >= 1) {
            noOfThreads = Integer.parseInt(args[1]);
            noOfTasks = Integer.parseInt(args[2]);
            startRange = Integer.parseInt(args[3]);

            tableName = new String[args.length - 4];
            for (int i = 0; i < tableName.length; i++) {
                tableName[i] = args[i + 4];
                tableNames.add(tableName[i]);
            }
        } else {
            noOfThreads = Integer.parseInt(prop.getProperty("NUMBER_OF_THREADS").trim());
            noOfTasks = Integer.parseInt(prop.getProperty("NUMBER_OF_TASKS").trim());
            startRange = Integer.parseInt(prop.getProperty("ID_START_RANGE").trim());
            tableNames = Arrays.asList(prop.getProperty("TABLES").trim().split(","));
        }

        for (String arg : tableNames) {

            //Some Other Code

        }
    }   

Énoncé Du Problème:-

Maintenant, ce que je suis en train de faire est - Supposons que si une personne est en cours d'exécution du programme comme ceci

java -jar Test.jar "C:\\test\\config.properties" 10

puis dans mon programme, il doit remplacer noOfThreads seulement-

noOfThreads should be 10 instead of 100

Et supposons que si cette personne est en cours d'exécution du programme comme celui-

java -jar Test.jar "C:\\test\\config.properties" 10 100

puis dans mon programme, il doit remplacer noOfThreads et noOfTasks seulement-

noOfThreads should be 10 instead of 100
noOfTasks should be 100 instead of 10000

Et éventuellement d'autres cas d'utilisation.

Quelqu'un peut-il me suggérer des moyens d'atteindre ce scénario? Merci pour l'aide

OriginalL'auteur arsenal | 2013-03-18