# java programm über kommandozeile starten mit dokumentpfad als parameter



## danielandross (19. April 2007)

Hallo,
ich möchte mein kompiliertes Java Programm über die Kommandozeile ausführen das mache ich folgendermaßen:

```
java -classpath . MyClass
```

Ich möchte aber dass mein Programm einen Dokumentenpfad als Parameter übernimmt. wenn ich diesen eingebe bekomme ich vom Programm immer eine nullpointerexception. das file existiert nicht. Am Programm kann es nicht liegen weil es 1a funktioniert wenn ichs hardcoded reinmache.
So habe ich es versucht:

```
java -classpath . MyClass d:\\aaa.doc
```


----------



## Anime-Otaku (19. April 2007)

du weißt schon, dass "d:\\aaa.doc" in dem String Array unter args[0] zu finden ist?

Ein bisschen Programmcode wäre trotzdem gut. Zumindest wie du die Parameter entgegen nimmst

Und ich würde dir empfehlen eine überprüfen der Eingangsdaten auf nullund/oder größe des Argumentenarrays zu machen. NullPointerException dürfen nicht fliegen, da das vorher abgefangen werden kann.


----------



## danielandross (19. April 2007)

Dass es dann im args[0] stehen soll ist mir klar. Ich mache das so:

```
File myFile = new File(args[0]);
			FileInputStream fis = new FileInputStream(myFile);
```

Ich gehe mal davon aus dass das irgendwie mit dem classpath zusammenhängt.
Ich navigiere ja zuerst in das verzeichnis in dem meine kompilierte Distribution steht und gebe dann den code ein. Kann es vielleicht sein dass die Kommandozeile dann nicht mehr zurück nach d: findet weil ich ja zuvor in einem unterverzeichnis von d: war.


----------



## Anime-Otaku (19. April 2007)

An deiner Stelle würde ich einfach mal reindebuggen was überhaupt ankommt.

Wenn du eclipse benutzt kannst du auch über die Ausführen Funktion mal Argumente dran hängen.

Was ich mich gerde frage...muss man Argumente auf der Kommandozeile selbst escapen? Ich glaube nicht, im jva source...ja, da dort das Escapezeichen ist, aber in der Kommandozeile doch nicht.


----------



## danielandross (19. April 2007)

Escapezeichen? Also ich hab mir jetzt gleich am anfang mal args[0] ausgeben lassen. Das kommt schon korrekt an.


----------



## Anime-Otaku (19. April 2007)

Escapezeichen ist im Java Source Code das Backslash("\"), da um im Java Sourcecode in einem String ein Backslash darzustellen muss man zwei schreiben, weil das Backslash auch z.B. benutzt wird um unicode Zeichen im Java sourcecode darzustellen. z.b.

```
char einBackslashZeichen = '\\';
System.out.println(einBackslashZeichen);//Ausgabe ist ein \
```

Du übergibst aber mit d:\\aaa.doc zwei Backslashe, weil in der Kommandozeile der Backslash ja kein Escapezeichen ist, sondern nur ein Zeichen halt. Probier mal in der Kommandozeile nur mal ein Backslash.


P.S.: die ganze Exception wäre auch hilfreich


----------



## danielandross (19. April 2007)

ok wir haben den fehler gefunden. Das lag irgendwie daran, dass ich hätte alle libraries in den aufruf hätte einbauen sollen.
trotzdem thx


----------

