Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5 (Tiger-Release)
Buch: Java ist auch eine Insel
gp Kapitel 8 Die Funktionsbibliothek
  gp 8.1 Die Java-Klassenphilosophie
    gp 8.1.1 Übersicht über die Pakete der Standardbibliothek
  gp 8.2 Wrapper-Klassen
    gp 8.2.1 Die Character-Klasse
    gp 8.2.2 Die Boolean-Klasse
    gp 8.2.3 Die Basisklasse Number für numerische Wrapper-Objekte
    gp 8.2.4 Die Klasse Integer
    gp 8.2.5 Behandlung von Überlauf
    gp 8.2.6 Unterschiedliche Ausgabeformate
    gp 8.2.7 Autoboxing: Boxing und Unboxing
  gp 8.3 Benutzereinstellungen
    gp 8.3.1 Eine zentrale Registry
    gp 8.3.2 Einträge einfügen, auslesen und löschen
    gp 8.3.3 Auslesen der Daten und schreiben in anderem Format
    gp 8.3.4 Auf Ereignisse horchen
  gp 8.4 Systemeigenschaften der Java-Umgebung
    gp 8.4.1 line.separator
    gp 8.4.2 Browser-Version abfragen
    gp 8.4.3 Property von der Konsole aus setzen
    gp 8.4.4 Umgebungsvariablen des Betriebssystems
  gp 8.5 Ausführung von externen Programmen
    gp 8.5.1 DOS-Programme aufrufen
    gp 8.5.2 Die Windows-Registry verwenden
    gp 8.5.3 Einen HTML-Browser unter Windows aufrufen
  gp 8.6 Klassenlader (Class Loader)
    gp 8.6.1 Woher die kleinen Klassen kommen
    gp 8.6.2 Drei Typen von Klassenladern
    gp 8.6.3 Der java.lang.ClassLoader
    gp 8.6.4 Hot Deployment mit dem URL-ClassLoader
    gp 8.6.5 Das jre/lib/endorsed-Verzeichnis
    gp 8.6.6 Wie heißt die Klasse mit der Methode main()?
  gp 8.7 Zeitmessung und Profiling


Galileo Computing

8.4 Systemeigenschaften der Java-Umgebung  downtop

Die Java-Umgebung verwaltet Systemeigenschaften wie Pfadtrenner oder Version der virtuellen Maschine in einem java.util.Properties-Objekt. Die statische Funktion System.getProperties() erfragt diese Systemeigenschaften und liefert das gefüllte Properties-Objekt zurück. Zum Erfragen einzelner Eigenschaften ist das Properties-Objekt aber nicht unbedingt nötig: System.getProperty() erfragt direkt eine Eigenschaft.


Beispiel   Gib alle Systemeigenschaften auf dem Bildschirm aus.

System.getProperties().list( System.out );

Gib den Namen des Betriebssystems aus:


System.out.println( System.getProperty("os.name") );

Eine Liste der Standard-Systemeigenschaften bietet die API-Dokumentation und die Web-Seite http://www.tolstoy.com/samizdat/sysprops.html sammelt für unterschiedliche Laufzeitumgebungen Belegungen.



final class java.lang.  System  

gp  static Properties getProperties()
Liefert ein mit den aktuellen Systembelegungen gefülltes Properties-Objekt.
gp  static String getProperty( String key )
Gibt die Belegung einer Systemeigenschaft. Ist der Schlüssel null oder leer gibt es eine NullPointerException bzw. eine IllegalArgumentException.
gp  static String getProperty( String key, String def )
Gibt die Belegung einer Systemeigenschaft. Ist sie nicht vorhanden, liefert die Funktion die Zeichenkette def, den Default-Wert. Für die Ausnahmen gilt das gleiche wie bei getProperty(String).
gp  static String setProperty( String key, String value )
Belegung die Systemeigenschaft neu. Es wird die alte Belegung (oder null falls es keine alte Belegung gab) zurückgegeben.
gp  static String clearProperty( String key )
Löscht eine Systemeigenschaft aus der Liste. Es wird die alte Belegung (oder null falls es keine alte Belegung gab) zurückgegeben.

Galileo Computing

8.4.1 line.separator  downtop

Um nach dem Ende einer Zeile zum Anfang der nächsten zu kommen, wird ein Zeilenumbruch (engl. new line) eingefügt. Das Zeichen für den Zeilenumbruch muss kein einzelnes sein, es können auch mehrere Zeichen nötig sein. Zur Last der Programmierer unterscheidet sich die Anzahl Zeichen für den Zeilenumbruch auf den bekannten Architekturen:

gp  Unix: Line Feed (Zeilenvorschub)
gp  Macintosh: Carriage Return (Wagenrücklauf)
gp  Windows: Beide Zeichen Carriage Return und Linefeed

Der Steuercode für Carriage Return (kurz CR) ist 13 (0x0D), der für Line Feed (kurz LF) ist 10 (0x0A). Java vergibt obendrein eigene Escape-Sequenzen für diese Zeichen: \r für Carriage Return und \n für Line Feed. (Die Sequenz \f für ein Form Feed – Seitenvorschub – spielt bei den Zeilenumbrüchen keine Rolle.)

Um sich nicht in eine Abhängigkeit eines Betriebssystems zu begeben, sollte der Zeilenumbruch vom System erfragt werden. Hierzu gibt es eine Property: line.separator. Unter Windows ergibt sich folgendes Bild:


System.out.println( System.getProperty("os.name") );             // Windows 2000
String lineSep = System.getProperty( "line.separator" );
System.out.println( lineSep.length() );                          // 2
System.out.println( Integer.toHexString(lineSep.charAt(0)) );    // d
if ( lineSep.length() > 1 )
  System.out.println( Integer.toHexString(lineSep.charAt(1)) );  // a

Galileo Computing

8.4.2 Browser-Version abfragedowntop

Nützlich für Applets sind die Eigenschaften browser.version und java.vendor. Letzteres identifiziert den Browser und so lässt sich in Erfahrung bringen, ob der Browser ein Internet Explorer oder Netscape Communicator ist.


String prop = System.getProperty( "java.vendor" );
boolean isIe = prop.indexOf( "Microsoft Corp." ) >= 0;

Galileo Computing

8.4.3 Property von der Konsole aus setzen  downtop

Eigenschaften lassen sich auch bei Programmstart von der Konsole aus setzen. Dies ist praktisch für eine Eigenschaft, die beispielsweise das Verhalten des Programms steuert oder das Programm konfiguriert. In der Kommandozeile werden mit -D der Name der Eigenschaft und ihr Wert angegeben. Viele Entwicklungsumgebungen erlauben es, diese in einem Fenster zu setzen. Die Informationen tauchen nicht bei der Argument-Liste in der main()-Methode auf, da sie vor dem Namen der Klasse stehen und bereits von der Java-Laufzeitumgebung verarbeitet werden.

Um die Eigenschaften auszulesen, gibt es zwei Möglichkeiten. Eine davon ist überraschend.

Listing 8.6   SetProperty.java


class SetProperty
{
  static public void main( String args[] )
  {
    boolean debug = false;

    String prop = System.getProperty( "DEBUG" );

    // Erster Weg

    if ( prop != null )
      debug = Boolean.valueOf(prop).booleanValue();

    if ( debug )
       System.out.println( "Wir dürfen debuggen" );

    // Zweiter Weg

    System.out.println( Boolean.getBoolean("DEBUG") );
 }
}

Auf der Konsole folgt die Ausgabe


$ java -DDEBUG=true SetProperty

Wir dürfen debuggen


true

Wir bekommen über getProperty() einen String zurück, der den Wert anzeigt. Falls es überhaupt keine Eigenschaft mit diesem Namen gibt, erhalten wir stattdessen null. So wissen wir auch, ob dieser Wert überhaupt gesetzt wurde.

Für die Wahrheitswerte gibt es die statische Funktion getBoolean() in der Klasse Boolean, die aus den System-Properties eine Eigenschaft mit dem angegebenen Namen heraussucht.


public static boolean getBoolean( String name ) {
  return toBoolean( System.getProperty(name) );
}

Es erstaunt, diese Funktion in der Wrapper-Klasse Boolean anzutreffen, da dies nichts mit den Wrapper-Objekten zu tun hat. Gegenüber einer eigenen direkten System-Anfrage hat getBoolean() auch den Nachteil, dass wir bei der Rückgabe false nicht unterscheiden können, ob es die Eigenschaft nicht gibt, oder ob die Eigenschaft mit dem Wert false belegt ist.



class java.lang.  Boolean  
implements Serializable

gp  static boolean getBoolean( String propName )
Liest eine Systemeigenschaft aus.

Galileo Computing

8.4.4 Umgebungsvariablen des Betriebssystems  toptop

Fast jedes Betriebssystem nutzt das Konzept der Umgebungsvariablen; bekannt ist etwa PATH für den Suchpfad für Applikationen unter Windows und unter Unix. Die von Java eingeführten Eigenschaften mittels System.getProperties() unterschieden sich grundlegend von den System-Umgebungsvariablen und tauchen daher in der Liste nicht auf.

Seit Java 5 ist es möglich, auf diese System-Umgebungsvariablen zuzugreifen. Dazu dient die statische Funktion getenv() von System, wo auch getProperties() zu finden ist. Sie liefert eine Menge von <String, String>-Paaren. Um auf eine spezielle Umgebungsvariable zuzugreifen, lässt sich getenv(String) nutzen, etwa um den Suchpfad herauszufinden: System.getenv("path");


Beispiel   Gib die Umgebungsvariablen des Systems aus. Um die Ausgabe etwas übersichtlicher zu gestalten, ist bei der Aufzählung jedes Komma durch ein Zeilenvorschubzeichen ersetzt.

Map map = System.getenv();
System.out.println( map.toString().replace(’,’, ’\n) );





Copyright © Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de