Überschreiben Sie die Eigenschaftendatei, wenn ein Befehlszeilenwert vorhanden ist

Ich habe ein Programm, das alles ausliestconfig.properties Datei, wenn die Befehlszeile außer dem Speicherort der Datei config.properties keine Argumente enthält. Unten ist meine Datei config.properties.

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

Wenn ich mein Programm über die Eingabeaufforderung wie folgt ausführe:

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

Es sollte alle vier Eigenschaften aus dem lesenconfig.properties Datei. Angenommen, ich führe mein Programm wie folgt aus:

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

Dann sollte es alle Eigenschaften aus den Argumenten lesen und die Eigenschaften in der Datei config.properties überschreiben.

Unten ist mein Code, der in diesem Szenario gut funktioniert.

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

        }
    }   

Problemstellung:-

Ich versuche jetzt Folgendes zu tun: Angenommen, eine Person führt ein Programm wie dieses aus

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

dann sollte es in meinem programm überschreibennoOfThreads nur-

noOfThreads should be 10 instead of 100

Angenommen, diese Person führt ein Programm wie dieses aus.

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

dann sollte es in meinem programm überschreibennoOfThreads undnoOfTasks nur-

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

Und mögliche andere Anwendungsfälle.

Kann mir jemand vorschlagen, wie man dieses Szenario erreicht? Danke für die Hilfe

Antworten auf die Frage(3)

Ihre Antwort auf die Frage