Hallo,
Ich versuche mit einem Applet Verzeichnisse einzulesen, die auf dem selben Server liegen wie das Applet. Dazu habe ich die Klasse URL herangezogen, und ein BufferedReader liest zeilenweise den Inhalt der als URL übergebenen Datei aus. Dies funktioniert auch tadellos, solang es sich bei der URL tatsaechlich um einen Datei handelt (also zb. file://C:/Daten/test.txt)
Leider scheitert diese Methode sobald ein Verzeichnis uebergeben wird (file://C:/Daten). Nun ist es fuer mich aber gerade interessant, welche Unterverzeichnisse sich darin befinden :(
Kann mir da vielleicht jemand einen heissen Tipp geben, wie ich dennoch die Unterverzeichnisse auslesen kann? Vielen Dank!
Wegen der Einschränkungen eines Applets bezüglich des Dateizugriffs darf ein Applet nur eine URL-connection zu dem Host herstellen, auf dem es selbst gespeichert ist. Per URL können auch nur Ressorcen, keine Dateien oder Verzeichnisse, angefordert werden. Liegt die Class-Datei des Applets auf www.meinedomain.tld, kann ein Applet also Ressourcen von www.meinedomain.tld anfordern. Der http-Zugriff auf www.meinedomain.tld/index.html wäre also möglich, ebenso der http-Zugriff auf www.meinedomain.tld/bilder (bilder ist ein Verzeichnis). Der http-Zugriff auf www.meinedomain.tld ergibt www.meinedomain.tld/index.html oder www.meinedomain.tld/default.html, je nach Einstellung des Servers.
Im File-Protokoll heißt das:
Applet-codeBase = file://C:\Daten
URL url = new URL(getCodeBase(), "test.txt");
d = new BufferedReader(new InputStreamReader(url.openStream()));
ist möglich.
URL url = new URL(getCodeBase(), "bilder");
d = new BufferedReader(new InputStreamReader(url.openStream()));
(bilder ist ein Verzeichnis) ist möglich. Ergibt, abhängig vom Betriebssystem, den Verzeichnisinhalt von C:\Daten\bilder.
//URL url = new URL(getCodeBase(), "");
//URL url = new URL(getCodeBase(), "./");
URL url = getCodeBase();
d = new BufferedReader(new InputStreamReader(url.openStream()));
wird aus Sicherheitsgründen verhindert, weil der Verzeichnisinhalt von C:\Daten eine Ressource von C:\ ist.
Was _genau_ willst Du erreichen? Für das Auslesen von Verzeichnisinhalten des http-Servers wirst Du etwas Serverseitiges (JSP, CGI...) brauchen. Zum Auslesen lokaler Verzeichnisse wirst Du signierte Applets benötigen, die einen direkten Zugriff auf lokale File-Objekte haben.
viele Grüße
Axel