URL.getPath() funktioniert nicht wie erwartet !

vfl_freak

Premium-User
Moin,

ich möchte mit folgenden Code in meiner Anwendung prüfen, ob ein bestimmtes Verzeichnis (hier: "dir3") auf unserem WebServer existiert.
Java:
URL urlTest = null;
try
{
    urlTest = new URL( "www.XYZ.de/dir1/dir2/dir3/"  );
}
catch( MalformedURLException e )
{
    e.printStackTrace();
}
String sResult = urlTest.getPath();
System.out.println( "<" + sResult + ">" );

Die API von Java7 sagt mir dazu
public String getPath()
Gets the path part of this URL.
Returns:
the path part of this URL, or an empty string if one does not exist
was für mich heißt, dass ich einen leeren String als Result bekomme, wenn der angegebene Pfad nicht existiert, oder ?

Ich habe nun das Verzeichnis "dir3" umbenannt, bekomme aber im String "sResult"anstelle des erwarteten leeren Strings den o. g. Pfad "www.XYZ.de/dir1/dir2/dir3/" zurück .....

Mache ich was falsch?
Wie könnte ich das denn alternativ prüfen ??

Danke und Gruß
Klaus
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

deine URL ist nicht vollständig. Schreibe mal ein "http://" vor das "www.".

was für mich heißt, dass ich einen leeren String als Result bekomme, wenn der angegebene Pfad nicht existiert, oder ?
Nein, nicht direkt. Die URL selbst weiß nicht, ob die dahinter liegende Resource existiert oder nicht, hierzu müsste erst je nach Protokoll eine Anfrage geschickt werden. Im Kontext des Javadoc bedeutet dies, dass in der URL eine Pfadangabe enthalten ist.

Grüße,
BK
 
Zuletzt bearbeitet:

vfl_freak

Premium-User
Moin,

danke für die schnelle Antwort!

Sorry, war mein Fehler! Es steht davor!
Also wirklich
Java:
urlTest = new URL( "http://www.XYZ.de/dir1/dir2/dir3/"  );

Gruß
Klaus

EDIT
Habe gerade noch mal im Debugger geschaut - der letzte BackSlash fehlt,
also
Java:
urlTest = new URL( "http://www.XYZ.de/dir1/dir2/dir3"  );

Und in der Rückgabe steht nicht der gesamte Pfad, sondern nur
Java:
/dir1/dir2/dir3
Wobei eben '1' und '2' ex., nur '3' nicht .....
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

Wenn du auf die Existenz eines Ordners / einer Datei prüfen willst, so sollte hier eine Lösung für dein Problem stehen. Mit Hilfe der URLConnection Klasse kannst du eine Verbindung aufbauen und den HTTP-Statuscode (200 = OK, 404 = Not found) abfragen.

Grüße,
BK
 

vfl_freak

Premium-User
hmm, leider nicht - bekomme jetzt einen ResponseCode 403, obwohl der Zugriff erlaubt ist (da ich bei korrektem Verzeichnisnamen, von dort Dateien runterladen kann!

Java:
String strTest =  http://www.XYZ.de/dir1/dir2/dir3;
URL urlTest = null;
int iErg = -1;
try
        {
            urlTest = new URL( strTest );
            HttpURLConnection httpConn = (HttpURLConnection) urlTest.openConnection();
            httpConn.setRequestMethod( "GET" );
            httpConn.connect();
            iErg = httpConn.getResponseCode();
}
catch( Exception e )
{
            e.printStackTrace();
}
System.out.println( "<<" + strTest + ">> ## <<" + iErg + ">>" );
Resultat: <<http://www.XYZ.de/dir1/dir2/dir3>> ## <<403>>

Hinweis: https klappt gar nicht

Gruß Klaus
 

vfl_freak

Premium-User
So, habe jetzt festgestellt, das eine reine Verzeichnisprüfung auf einem Server zu zulässig ist.
Sie wird i. d. R. unterdrückt, damit niemand die Verzeichnis-/Dateistruktur scannen kann!

Ich prüfe jetzt analog zum oben genannten das Vorhandensein ein Dummy-Datei in den jeweiligen Verzeichnissen
Java:
String strTest =  "http://www.XYZ.de/dir1/dir2/dir3/Dummy.txt";
URL urlTest = new URL( strTest );
HttpURLConnection huc =  (HttpURLConnection)urlTest.openConnection();
huc.setRequestMethod( "GET" );
huc.connect();
int code = huc.getResponseCode();
System.out.println( code );
und bekomme dann entweder eine 200 oder 404 zurück!

Nicht unbedingt schön, aber es funktioniert .....

Gruß Klaus