Prüfen ob eine Datei im Internet existiert
Hallo Forum, brauche mal Hilfe
Ich möchte per Java im Internet sehen ob deine Datei bzw. ein Bild da ist oder nicht.
Und im zweiten schritt abfragen welches Datum sie es hat.
Hier ist mein erster Codeschnipsel:
Mit einer Datei auf den lokalen System geht es, aber nicht im Internet.
Hat jemand eine Idee???
Gruß
Petra
Ich möchte per Java im Internet sehen ob deine Datei bzw. ein Bild da ist oder nicht.
Und im zweiten schritt abfragen welches Datum sie es hat.
Hier ist mein erster Codeschnipsel:
package pruef_datei;
import java.io.File;
public class Main {
private static final String datei = "www.domain.tld/test_datei.txt";
public static void main(String args) {
File bild = new File(datei);
if (bild.exists())
{
System.out.println("Ja, gibt es");
} else {
System.out.println("Nein, gibt es nicht");
} } }
Hat jemand eine Idee???
Gruß
Petra
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 86358
Url: https://administrator.de/contentid/86358
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
12 Kommentare
Neuester Kommentar
also wenn man sich den quellcode anguckt sieht man ja, dass er schon den genauen pfad angibt und überprüfen will ob die datei existiert. Das hat ja nichts mit "Suchen" zu tun.
Ich finde, wenn du schon auf einen Beitrag antwortest, dann solltest du dir wenigstens Gedanken machen.
Leider kann ich auch nicht weiter helfen, jedoch finde ich, dass das mal gesagt werden sollte und wenigstens hab ich mir den Beitrag GENAU durchgelesen.
Ich finde, wenn du schon auf einen Beitrag antwortest, dann solltest du dir wenigstens Gedanken machen.
Leider kann ich auch nicht weiter helfen, jedoch finde ich, dass das mal gesagt werden sollte und wenigstens hab ich mir den Beitrag GENAU durchgelesen.
also wenn man sich den quellcode anguckt
sieht man ja, dass er schon den genauen pfad
angibt und überprüfen will ob die
datei existiert. Das hat ja nichts mit
"Suchen" zu tun.
Ich finde, wenn du schon auf einen Beitrag
antwortest, dann solltest du dir wenigstens
Gedanken machen.
Leider kann ich auch nicht weiter helfen,
jedoch finde ich, dass das mal gesagt werden
sollte und wenigstens hab ich mir den Beitrag
GENAU durchgelesen.
sieht man ja, dass er schon den genauen pfad
angibt und überprüfen will ob die
datei existiert. Das hat ja nichts mit
"Suchen" zu tun.
Ich finde, wenn du schon auf einen Beitrag
antwortest, dann solltest du dir wenigstens
Gedanken machen.
Leider kann ich auch nicht weiter helfen,
jedoch finde ich, dass das mal gesagt werden
sollte und wenigstens hab ich mir den Beitrag
GENAU durchgelesen.
Ach du lieber Gott, was fällt mir nur ein. Danke für die Maßregelung.
Problem ist, daß der Zugriff über java.io.File eben nur auf direkt zugreifbare Dateien geht, also über lokale Dateien bzw. Dateien die über File-Protokolle wie SMB/CIFS (Windows-Shares) oder NFS (Unix-Mounts) zugänglich sind.
Im Internet wird üblicherweise HTTP verwendet, also muß man auch über HTTP versuchen die Datei zu holen.
Codeschnipsel:
Im Internet wird üblicherweise HTTP verwendet, also muß man auch über HTTP versuchen die Datei zu holen.
Codeschnipsel:
import java.net.URL;
import java.net.MalformedURLException;
import java.io.IOException;
public class HTTPREAD {
private static URL url;
public static void main(String args) {
try {
// Verbindung zur URL
url = new URL("http:/URL");
} catch (MalformedURLException e) {
e.printStackTrace();
}
// Diese Anfrage wirft eine java.net.ConnectException aus, wenn das Ziel der URL nicht existiert
try {
url.openStream().close();
System.out.println("Existiert");
} catch (java.net.ConnectException e) {
System.out.println("Existiert nicht oder nicht zugreifbar");
} catch (IOException e) {
// Sonstiger Verbindungsfehler
e.printStackTrace();
}
}
}
So wie mein Code war (und mache Zeichen zur Kommentierung hat hier das Forum rausgezogen) war es eine eigene Klasse und Java verlangt, daß der Dateiname des Sourcecodes und der Klassenname identisch ist.
Hier eine kurze Version als Methode, die man jeder Klasse hinzufügen kann:
Das gibt dann true oder false zurück, je nachdem ob er die Datei findet oder nicht, wobei Du nicht rausbekommst warum er die Datei nicht findet.
Kann man dann so aufrufen:
Hier eine kurze Version als Methode, die man jeder Klasse hinzufügen kann:
static boolean URLexists(java.lang.String URL) {
java.net.URL url;
try {
url = new URL(URL);
} catch (MalformedURLException e) {
return false;
}
try {
url.openStream().close();
return true;
} catch (IOException e) {
return false;
}
}
Kann man dann so aufrufen:
if(URLexists("www.domain.tld/test_datei.txt")) {
System.out.println("Existiert");
} else {
System.out.println("Existiert nicht");
}
Diesmal dürfte es nichts verschluckt haben, diesmal habe ich dran gedacht es als Code zu kennzeichnen.
Der Fehler ist, daß eine Methode natürlich außerhalb einer anderen Methode definiert werden muß.
Du hast vermutlich folgenden Aufbau
Der Fehler ist, daß eine Methode natürlich außerhalb einer anderen Methode definiert werden muß.
Du hast vermutlich folgenden Aufbau
public class Main {
...
public static void main(String args) {
...
static boolean URLexists(java.lang.String URL) {
....}
...
} hier Ende main
} hier Ende class
Das geht natürlich nicht. Es muß so aussehen:
public class Main {
...
public static void main(String args) {
...
} hier Ende main
static boolean URLexists(java.lang.String URL) {
....}
} hier Ende class
In der Ablauflogik.
Hier mal der richtige Code:
Zur Erklärung der prinzipielle Ablauf in Java:
Die Java-Umgebung lädt die Klasse beim Start und ruft die Methode <public static void main> auf. Dort beginnt der Ablauf eines Java-Programms und endet auch dort.
Du hast die Abfrage in die Methode URLexists reingepackt, aber in der main nichts aufgerufen, deswegen macht Java auch nichts (weil main leer ist).
=> Aufruf der Methode muß in der main-Methode erfolgen!
Und zweiter Ablauflogikfehler: An der Stelle, an der Du das in der Methode URLexists reingeschrieben hast, würde es sowieso nie aufgerufen werden, da die Methode vorher mit return verlassen wird.
Hier mal der richtige Code:
package pruef_datei_im_www;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
public class Main {
public static void main(String args) {
if (URLexists("www.domain.tld/test_datei.txt")) {
System.out.println("Existiert");
} else {
System.out.println("Existiert nicht");
}
}
static boolean URLexists(java.lang.String URL) {
java.net.URL url;
try {
url = new URL(URL);
} catch (MalformedURLException e) {
return false;
}
try {
url.openStream().close();
return true;
} catch (IOException e) {
return false;
}
}
}
Zur Erklärung der prinzipielle Ablauf in Java:
Die Java-Umgebung lädt die Klasse beim Start und ruft die Methode <public static void main> auf. Dort beginnt der Ablauf eines Java-Programms und endet auch dort.
Du hast die Abfrage in die Methode URLexists reingepackt, aber in der main nichts aufgerufen, deswegen macht Java auch nichts (weil main leer ist).
=> Aufruf der Methode muß in der main-Methode erfolgen!
Und zweiter Ablauflogikfehler: An der Stelle, an der Du das in der Methode URLexists reingeschrieben hast, würde es sowieso nie aufgerufen werden, da die Methode vorher mit return verlassen wird.
Das Programm funktioniert wie Designed, aber:
Es ist so programmiert, daß ich eine Fehlermeldung des Webservers erwarte, wenn die Datei nicht existiert/ich nicht zugreifen darf (HTTP Error 404 im Normalfall). So macht es auch mein Testwebserver gegen den ich das Programm getestet habe.
Wenn Du aber mal statt
im Browser eingibts (dieses Datei existiert nicht) gibt es keine Fehlermeldung, sondern es wird einfach die Suchseite angezeigt.
Dadurch kann das Programm eine Datei fehlerfrei lesen und meldet keinen Fehler. Ich wüsste aber auch nicht, wie ich da rausbekommen sollte, daß es die falsche Datei ist.
=> Wenn der Webserver auch bei nicht-existierenden Dateien Dateien zurückgibt, ist das ein Problem.
Es ist so programmiert, daß ich eine Fehlermeldung des Webservers erwarte, wenn die Datei nicht existiert/ich nicht zugreifen darf (HTTP Error 404 im Normalfall). So macht es auch mein Testwebserver gegen den ich das Programm getestet habe.
Wenn Du aber mal statt
www.domain.tld/test_datei.txt
www.domain.tld/test_datei2.txt
Dadurch kann das Programm eine Datei fehlerfrei lesen und meldet keinen Fehler. Ich wüsste aber auch nicht, wie ich da rausbekommen sollte, daß es die falsche Datei ist.
=> Wenn der Webserver auch bei nicht-existierenden Dateien Dateien zurückgibt, ist das ein Problem.