Czasem zachodzi potrzeba przekazania informacji do programu w momencie jego uruchomienia (linia poleceń), bądź sięgnięcia z programu do zasobów środowiska systemu operacyjnego celem sprawdzenia np.: gdzie znajduje się katalog użytkownika, bądź w jakim systemie operacyjnym uruchomiony jest program. Tutaj przydaje się poniżej zamieszczona wiedza.
Spis treści
Pobieranie wartości zmiennych środowiskowych
Celem pobrania zmiennych środowiskowych możemy zastosować metodę .getProperty() obiektu System tak jak w poniższym przykładzie:
public class PoleceniaSystemowe {
public static void main(String[] args) {
System.out.println(System.getProperty("user.dir"));
System.out.println(System.getProperty("user.home"));
System.out.println(System.getProperty("os.version"));
System.out.println(System.getProperty("os.name"));
}
}
Jak widać po efektach działania wyświetla informacje o systemie, które możemy wykorzystać w naszym programie celem dostosowania go do konkretnego środowiska.
Lista ciągów (kluczy) dla metody getProperty wygląda następująco:
- os.version : wersja systemu operacyjnego
- os.name : nazwa systemu operacyjnego
- os.arch : architektura systemu operacyjnego
- java.compiler : nazwa używanego kompilatora
- java.ext.dirs : dostępne ścieżki rozszerzeń
- java.library.path : ścieżki dostępu do bibliotek
- path.separator : separator ścieżki (w Windows to zazwyczaj “;”)
- file.separator : separator ścieżki dostępu do pliku (w Windows to zazwyczaj “\”)
- user.dir : aktywna ścieżka (aktywny katalog)
- user.name : nazwa konta użytkownika
- java.vm.version : wersja implementacji JVM
- java.vm.name : nazwa implementacji JVM
- java.home : katalog w którym zainstalowano Java
- java.runtime.version : wersja JVM
Przekazywanie parametrów do programu
Czasem chcielibyśmy uruchomić program i od razu w sposób nie interaktywny (odpytywany), a wsadowy (batch) podać dane na których program mógłby pracować i wykonać niezbędne operacje.
Inicjując pracę naszego programu z linii poleceń moglibyśmy go uruchomić wpisując:
java.exe -jar PoleceniaSystemowe.jar Ala="Ala" ma=true kota=1
Pracując jednakże w środowisku programistycznym NetBeans musimy zasymulować taki sposób uruchamiania w konfiguracji.

Następnie, upewniając się, że mamy wybrany właściwy plik z “Main Class” wpisujemy argumenty z jakimi ma być uruchamiany:

Użycie tego w programie jest już banalnie proste. Pewnie zauważyliście konstrukcję metody main, gdzie w jej argumentach jest umieszczona tablica Stringów?! Jeśli tak, to możecie się już domyślić, że w tej tablicy umieszczone są wszystkie argumenty podane w linii uruchomienia naszego programu rozdzielone delimiterem w postaci spacji ” “. Przykład takiego programu sprawdzającego argumenty z linii poleceń i jego działania jest umieszczony poniżej:

Listing zawartości katalogu plików
Często także potrzeba sprawdzić jakie pliki istnieją w bieżącym katalogu roboczym np. w celu wybrania jednego z nich do odczytu. Można skorzystać z metody .list() klasy File aby zbudować tablicę Stringów zawierającą nazwy plików.
void listuj(String nazwa) {
String[] pliki;
File file = new File(nazwa);
pliki = file.list();
for(String s:pliki) System.out.println(s);
}
Czasem jednak ta informacja jest niewystarczająca. Wtedy dobrze jest wiedzieć w jaki sposób można uruchomić polecenie systemowe. Taka operacja wymaga powiązania kilku procesów ze sobą, ale nie jest niczym szczególnym. Przykład programu uruchamiającego polecenie systemowe dir jest zamieszczony poniżej:
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
public class PoleceniaSystemowe {
public static void main(String[] tabA) {
Runtime t=Runtime.getRuntime(); // <-- przypisujemy uchwyt egzekucyjny
// obecnego procesu (działania programu)
try {
InputStream is=t.exec("cmd /c dir").getInputStream(); // <-- przechwytujemy wynik
// wykonania komendy (exec)
// jako strumień wejściowy
Scanner sc=new Scanner(is); // <-- strumień wejściowy terminujemy
// w obiekcie klasy Scanner
while (sc.hasNextLine()) System.out.println(sc.nextLine()); // <-- czytamy całą
// (i wypisujemy)
// zawartość bufora
}
catch (IOException ex) { System.err.println("Wystąpił błąd operacji...");}
}
}
W wyniku działania powyższego programu uzyskujemy:

W ten sam sposób możemy uruchamiać inne polecenia systemowe, a wynik ich działania odbierać jak wyżej.
Kod wyjścia z programu
Standardowo, po linii polityki twórców języka Java, kodem wyjścia z programu jest kod “0” – czyli wyjście bez błędu. Tym niemniej czasem (szczególnie przy przetwarzaniu typu łańcuchowego1kiedy jeden program uruchamia kolejny, a status jego zakończenia zwracany jest właśnie za pomocą kodu wyjścia) jest ważne, aby program pomimo, że zakończy się bez błędu, zwrócił oczekiwaną wartość wyjścia. Można tego dokonać na dwa sposoby:
import java.lang.Runtime;
public class KodWyjscia {
public static void main(String[] args) {
//Korzystając z klasy Runtime
Runtime t=Runtime.getRuntime();
t.exit(201);
}
}
public class KodWyjscia {
public static void main(String[] args) {
//Korzystając z metody exit() obiektu System
System.exit(203);
}
}
Wtedy program zakończy się z sztucznie zgłoszonym błędem, którego kod może nieść ważną informację do programu nadrzędnego z którego uprzednio nasz program został uruchomiony.
Comments are closed