Klassen Datei als Kommandozeilenparameter übergeben

Diskutiere Datei als Kommandozeilenparameter übergeben im Java Basics - Anfänger-Themen Bereich.
A

Azraaail

Hallo zusammen!

Nach langem Suchen habe ich leider nichts gefunden, was bei meinem Problem hilft..
Also: Ich habe ein Programm geschrieben, welches Strecken berechnet. Es funktioniert alles super, nur sollen zwei für das Programm benötigte Dateien als Kommandozeilenparameter eingegeben werden.
Es hat etwas mit dem String-Feld args in der main-Methode zu tun, aber ich weiß nicht, wie es gehen soll.
Was muss ich im Programmcode (Bild dabei) ändern, damit ich den Dateinamen nicht mehr im Code selbst drin stehen habe?

Das Programm soll sich wie im Bild verhalten (unser Prof will es so)
Wie sorge ich dafür, dass die Ergebnisse wie im zweiten Bild in der Kommandozeile ausgegeben werden? Ich habe im Programm "nur" system.out.println verwendet..

Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken
Schönen zweiten Weihnachtstag :D


Mein Code:
MeinCodeJava.jpg


Wie der Professor es bedienen will:
BildJava.jpg
 
A

Azraaail

Könntest du mir das bitte etwas ausführlicher erklären?
In cmd öffne ich dann mit javac Klassenname.java das Programm und übergebe die beiden einzulesenden Dateien wie...?
 
mihe7

mihe7

Könntest du mir das bitte etwas ausführlicher erklären?
Das ist ganz einfach: wenn Du java (das Runtime, also ohne c) aufrufst, kannst Du auf der Befehlszeile Parameter mitgeben - so wie in dem Beispiel Deines Profs. Diese Parameter werden in Form eines String-Arrays als Parameter an die main-Methode weitergeben, so dass Du dort darauf zugreifen kannst.

Probier mal folgendes:
Java:
public class Test {
    public static void main(String[] args) { // args ist das String-Array mit den Parametern
        System.out.printf("Es wurden %d Parameter angegeben:\n ", args.length);
        for (int i = 0; i < args.length; i++) {
            System.out.printf("Parameter %d: %s\n", i+1, args[i]);
        }
    }
Das übersetzt Du mit javac -cp . Test.java und lässt es anschließend laufen:
Code:
java -cp . Test 
java -cp . Test C:\test
java -cp . Test Ganz egal
Dann verstehst Du gleich, wie es funktioniert :)
 
A

Azraaail

Hey!
ich habe das ganze nun verstanden, vielen Dank!
Ein kleines Problem bleibt aber noch: In Eclipse habe ich im entsprechenden Java Project mehrere Hilfsklassen, z.B. FileInput, wie auch eine eigene Klasse, wo Werte gespeichert werden.
Wenn ich in cmd "java xxxxxx.java xxxxxx xxxxx" , also die aufzurufende Klasse mit den zwei Argumenten starte, gibt es zahlreiche Fehler, u.a. dass er Klassen nicht findet oder auch "cannot find symbol"

Hätte jemand dazu einen Tipp?

Beste Grüße
Azraaail
 
mihe7

mihe7

Grundsätzlich gilt, dass die benötigten Klassen im Classpath auffindbar sein müssen. Die IDE bzw. das verwendete Build-System sorgt automatisch dafür, auf der Befehlszeile musst Du den Classpath selbst angeben.

Du hast also mindestens folgende Möglichkeiten:

1. Projekt aus der IDE heraus mit Argumenten starten.
2. Aus der Befehlszeile heraus die übersetzten Klassen verwenden und mit Argumenten starten
3. Ein Jar aus der Befehlszeile heraus ein Jar mit Argumenten starten

zu 1.: Da ich Eclipse nicht verwende: https://www.cs.colostate.edu/helpdocs/cmd.pdf

zu 2.: wo genau die übersetzten Klassen im Dateisystem abgelegt werden, hängt von der IDE bzw. dem verwendeten Build-System ab. Bei einem Standard-Eclipse-Projekt dürftest Du in Deinem Projektverzeichnis einen bin-Ordner haben, der die übersetzten Klassen aufnimmt. Dann solltest Du die Anwendung aus Deinem Projektverzeichnis heraus mittels java -cp bin fqnMeinerKlasse ... starten können. Du kannst natürlich auch in das bin-Verzeichnis wechseln und dort java -cp . fqnMeinerKlasse ... aufrufen.

fqnMeinerKlasse musst Du natürlich durch den vollqualifizierten Namen (= inkl. der Paketnamen) der Klasse ersetzen, die die main-Methode enthält. Willst Du z. B. die main-Methode der Klasse App aus dem Paket uebung starten, wäre fqnMeinerKlasse durch uebung.App zu ersetzen.

zu 3.: Wenn Du in Eclipse ein Jar erzeugt hast (müsste über Export funktionieren), dann kannst Du die Anwendung mittels java -cp pfad/zur/erzeugten/datei.jar fqnMeinerKlasse ... starten. Hast Du eine ausführbare Jar erzeugt, funktioniert das auch mittels java -jar pfad/zur/erzeugten/datei.jar ... - hier kannst Du also auf die Angabe der Main-Klasse verzichten.
 
A

Azraaail

Super vielen Dank! Mit der 2. Methode hat´s geklappt, auch wenn ich nichts davon
fqnMeinerKlasse musst Du natürlich durch den vollqualifizierten Namen (= inkl. der Paketnamen) der Klasse ersetzen, die die main-Methode enthält. Willst Du z. B. die main-Methode der Klasse App aus dem Paket uebung starten, wäre fqnMeinerKlasse durch uebung.App zu ersetzen
gemacht habe (ich habe einfach nur den Klassennamen ohne sonst irgendwas dazu hingeschrieben).
Die zwei Argumente habe ich dahinter geschrieben und zack- es klappt.
Vielen Dank und frohes Neues!
 
mihe7

mihe7

auch wenn ich nichts davon [...] gemacht habe (ich habe einfach nur den Klassennamen ohne sonst irgendwas dazu hingeschrieben).
Doch, doch: wenn sich die Klasse in "keinem" Paket befindet, dann besteht der vollqualifizierte Name einfach aus dem Namen der Klasse :)

Frohes Neues.
 
A

Azraaail

Doch, doch: wenn sich die Klasse in "keinem" Paket befindet, dann besteht der vollqualifizierte Name einfach aus dem Namen der Klasse :)
Ahh, das Default Package zählt also gar nicht als "echtes" Package.. :D

Danke für deine Hilfe!

Auch dir ein frohes neues Jahr!
 
Thema: 

Datei als Kommandozeilenparameter übergeben

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben