Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben

learningbydoing

Aktives Mitglied
Hallo zusammen😃,

habe mal wieder eine Frage.

Ich möchte bei meinem Programm, mehrere Parameter bei dem Start über die Kommandozeile übergeben. Das Programm soll mit einem gegebenen Pfad und den gegebenen Dateiendungen, das Verzeichnis nach diesen durchsuchen und anschließend, wenn alle Dateiendungen vorhanden sind, eine Datei hinzufügen. Diesen Punkt habe ich soweit schon hinbekommen. Leider, komme ich nicht weiter, wie man die Parameter richtig übergibt. Soweit ich weiß, braucht man da doch eine Art Parser oder nicht🤔?
Das Ausführen des Programms sollte dann ungefähr so aussehen:
java Programm.jar "ein beliebiger Pfad" "mehrere Dateiendungen" -> z.B. java Programm.jar C:\User\Downloads\NeuerOrdner .zip .txt .pptx .docx

Vielen Dank schon einmal im Voraus für Eure Hilfe!😄
 
Wenn du folgendes aufrufst:
Code:
java -jar programm.jar C:\User\Downloads\NeuerOrdner .zip .txt .pptx .docx
dann wird der String-Array Parameter deiner main()-Methode fünf Elemente enthalten.
Du brauchst hier also nichts selbst zu parsen.
Also:
Java:
public class DeineStartKlasse {
  public static void main(String[] args) {
    // -> args hat Länge 5
  }
}
 
Ah ok verstehe. Kann ich das aber auch spezifizieren? Also das der User zum Beispiel:

java -jar programm.jar -Dpath="C:\User\Downloads\NeuerOrdner" -Dendings=".zip", ".txt", ".pptx", ".docx"

oder

java -jar programm.jar -Dpath="C:\User\Downloads\NeuerOrdner" .zip .txt .pptx .docx

eingeben muss?
 
Ja, du kannst auch die Java System Properties hierfür verwenden, aber dann so:
Code:
java -Dpath="C:\User\Downloads\NeuerOrdner" -jar programm.jar .zip .txt .pptx .docx
also immer _vor_ dem "-jar" Parameter.
Ansonsten musst du einen Commandline Parser für Java verwenden. Z.B. Apache Commons CLI.
 
Ich würde es dann nach dieser Art machen (also System Properties):

java -jar programm.jar -Dpath="C:\User\Downloads\NeuerOrdner" -Dendings=".zip", ".txt", ".pptx", ".docx"

😃👍
 
java -jar programm.jar -Dpath="C:\User\Downloads\NeuerOrdner" -Dendings=".zip", ".txt", ".pptx", ".docx"
Falsch. Das wäre wieder ein Program Argument (in dem String[] args Array der main-Methode).
Wie ich bereits weiter oben sagte: System Properties müssen _vor_ dem "-jar" angegeben werden!

Richtig wäre:
Code:
java -Dpath="C:\User\Downloads\NeuerOrdner" -Dendings=".zip", ".txt", ".pptx", ".docx" -jar programm.jar

Und mit diesen Anführungszeichen wird es auch nicht funktionieren. Du könntest eher:
Code:
java -Dpath="C:\User\Downloads\NeuerOrdner" -Dendings=".zip, .txt, .pptx, .docx" -jar programm.jar
verwenden, musst es dann aber auch selber an den Kommas splitten.
 
Was du da machen willst, sollte über Argumente gemacht werden und nicht über die Systemproperties, die sind dafür nicht der richtige Weg. Klar kann man es so machen, aber spätestens wenn du mal einen Launcher in Form einer .exe verwendest, kriegst du damit ein Problem.
Java:
java -jar programm.jar -path="C:\User\Downloads\NeuerOrdner" -endings=".zip .txt .pptx .docx"
    
//In Main wird ein Array mit 2 Werten ankommen, einmal:
"-path=C:\User\Downloads\NeuerOrdner"
//und
"-endings=.zip .txt .pptx .docx"
Jetzt musst du die Argumente halt noch parsen, ist in dem Fall nicht weiter schwer.

Wenn du die Anführungszeichen bei endings nicht verwendest, werden noch mehr Array-Elemente geliefert, da an Leerzeichen außerhalb von Anführungszeichen gesplittet wird.
Auch das ist einfach zu parsen/interpretieren

Möglich wäre also auch ein solcher Aufruf:
Java:
java -jar programm.jar -path "C:\User\Downloads\NeuerOrdner" -endings .zip .txt .pptx .docx
Dein Interpreter würde hinter "-path" einen Dateipfad erwarten. Kommt was anderes, dann muss ein Fehler ausgegeben werden. Nach -endings würde eine unbestimmte Anzahl an Dateierweiterungen erwartet werden.
 
Zuletzt bearbeitet:
Java:
java -jar programm.jar -path="C:\User\Downloads\NeuerOrdner" -endings=".zip .txt .pptx .docx"
  
//In Main wird ein Array mit 2 Werten ankommen, einmal:
"-path=C:\User\Downloads\NeuerOrdner"
//und
"-endings=.zip .txt .pptx .docx"

In diesem Fall könntest du auf die einzelnen Elemente von "args" mit String.split() am Gleichheitszeichen splitten. Das erste Element des Strings ist dann der Schlüssel (z. B. "-path") und das zweite Element der zugehörige Wert. Es ist dann noch deine Aufgabe gültige Schlüssel und gültige Werte zu prüfen und entsprechend zu behandeln.

Beim Schlüssel "-endings" können ja mehrere Werte enthalten sein, die dann wieder am Leerzeichen gesplittet werden können, um die einzelnen Werte zu erhalten.
 

Zurück
Oben