Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (2. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Java ist auch eine Insel (2. Auflage)
gp Kapitel 24 Sicherheitskonzepte
  gp 24.1 Der Sandkasten (Sandbox)
  gp 24.2 Sicherheitsmanager (Security Manager)
    gp 24.2.1 Der Sicherheitsmanager bei Applets
    gp 24.2.2 Sicherheitsmanager aktivieren
    gp 24.2.3 Wie nutzen die Java-Bibliotheken den Sicherheitsmanager?
    gp 24.2.4 Rechte vergeben durch Policy-Dateien
    gp 24.2.5 Erstellen von Rechtedateien mit dem grafischen Policy-Tool
  gp 24.3 Klassenlader (Class Loader)
    gp 24.3.1 Wie heißt die Klasse mit der Methode main()?
  gp 24.4 Digitale Unterschriften
    gp 24.4.1 Die MDx-Reihe
    gp 24.4.2 Secure Hash Algorithm (SHA)
    gp 24.4.3 Mit der Security-API einen Fingerabdruck berechnen
    gp 24.4.4 Die Klasse MessageDigest
    gp 24.4.5 Unix-Crypt
  gp 24.5 Verschlüsseln von Datenströmen


Galileo Computing

24.3 Klassenlader (Class Loader)  downtop


Galileo Computing

24.3.1 Wie heißt die Klasse mit der Methode main()?  toptop

In C(++) ist das erste Element des Felds der main(int argc, char **argv)-Funktion der Name des Programms. Das ist in Java nicht so. Die Methode enthält als ersten Parameter nicht den Namen der Klasse beziehungsweise des Programms, sondern einfach den ersten Parameter, sofern auf der Kommandozeile übergeben. Mit ein bisschen Umweg geht das auch für Klassen.

Der zu einer Klasse gehörende Klassenlader lässt sich mit dem Class-Objekt erfragen. Mit der Methode getResource() bekommen wir von einem Klassennamen ein URL-Objekt zurück, welches dann die Position der Klassendatei im Dateisystem anzeigt. Das folgende Programmbeispiel zeigt, wie wir von einer Klasse den vollständigen Dateipfad zurückbekommen.

Es funktioniert allerdings nur für Klassen, die nicht in einem Jar-Archiv eingebunden sind und nicht aus den Standardbibliotheken kommen. Auch ist eine Dateiangabe unmöglich, wenn wir etwa einen eigenen Klassenlader schreiben, der die Klassen aus einer Datenbank nimmt. Dann gibt es keinen Pfad mehr.

Listing 24.4   FindClassPath.java

import java.net.*;

class FindClassPath
{
  static String getClassPath( Class clazz )
  {
    ClassLoader loader = clazz.getClassLoader();

   if ( loader == null )
      return null;

    URL url = loader.getResource(clazz.getName().replace('.','/')
                                 + ".class");
 
   return ( url != null ) ? url.toString() : null;
  }
  public static void main( String args[] ) throws Exception
  {
    Class c = Class.forName( "FindClassPath" );

    System.out.println( "Klasse: " + c.getName() );

    System.out.println( "Dateiname: " + getClassPath(c) );
  }
}

Benötigen wir den Ort einer Klasse, um mit dieser Information auf weitere Dateien im Verzeichnis zuzugreifen, geht es mit der Class.getResourceAsStream(String) einfacher. Diese Methode dient insbesondere dazu, Ressourcen wie Bilder oder Musik aus einem Jar-Archiv auszulesen. Auch der ClassLoader bietet die Methode getResourceAsStream(String) an. Diese Methoden funktionieren ebenfalls für Klassen aus Jar-Archiven, wenn die Ressource auch im Archiv liegt.





Copyright © Galileo Press GmbH 2003
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