Wie erhalte ich einen InputStream von einer URL?
Zum Beispiel möchte ich die Datei unter der URL nehmen wwww.somewebsite.com/a.txt
und sie als InputStream in Java über ein Servlet lesen.
ich habe es versucht
InputStream is = new FileInputStream("wwww.somewebsite.com/a.txt");
aber was ich bekam war ein Fehler:
java.io.FileNotFoundException
java
url
inputstream
Weißer Bär
quelle
quelle
servlets
Tags rückgängig gemacht? Hier ist keinejavax.servlet.*
API beteiligt. Sie hätten genau das gleiche Problem, wenn Sie dies in einer einfachen Vanille-Java-Klasse mit einermain()
Methode tun würden .Antworten:
Verwenden Sie
java.net.URL#openStream()
mit einer richtigen URL (einschließlich des Protokolls!). Z.BSiehe auch:
quelle
Versuchen:
quelle
(a)
wwww.somewebsite.com/a.txt
ist keine 'Datei-URL'. Es ist überhaupt keine URL. Wenn Siehttp://
die Vorderseite einfügen, handelt es sich um eine HTTP-URL, die Sie hier eindeutig beabsichtigen.(b)
FileInputStream
gilt für Dateien, nicht für URLs.(c) Der Weg, um einen Eingabestream von einer beliebigen URL abzurufen, ist über
URL.openStream(),
oderURL.getConnection().getInputStream(),
gleichwertig, aber Sie haben möglicherweise andere Gründe, den zu erhaltenURLConnection
und zuerst damit zu spielen.quelle
Ihr ursprünglicher Code verwendet FileInputStream, um auf vom Dateisystem gehostete Dateien zuzugreifen.
Der von Ihnen verwendete Konstruktor versucht, eine Datei mit dem Namen a.txt im Unterordner www.somewebsite.com des aktuellen Arbeitsverzeichnisses zu finden (der Wert der Systemeigenschaft user.dir). Der von Ihnen angegebene Name wird mithilfe der File-Klasse in eine Datei aufgelöst.
URL-Objekte sind der generische Weg, um dies zu lösen. Sie können URLs verwenden, um auf lokale Dateien, aber auch auf im Netzwerk gehostete Ressourcen zuzugreifen. Die URL-Klasse unterstützt neben http: // oder https: // das Protokoll file: //, sodass Sie loslegen können.
quelle
Reines Java:
Mit einigem Erfolg verwende ich diese Methode. Es behandelt Weiterleitungen und man kann eine variable Anzahl von HTTP-Headern als übergeben
Map<String,String>
. Es ermöglicht auch Weiterleitungen von HTTP zu HTTPS .Vollständiger Beispielaufruf
quelle
HttpURLConnection
wird bereits Weiterleitungen folgen, es sei denn, Sie sagen es nicht, was Sie nicht haben.HttpURLConnection
bereits erwähnt, wie bereits erwähnt.Hier ist ein vollständiges Beispiel, das den Inhalt der angegebenen Webseite liest. Die Webseite wird aus einem HTML-Formular gelesen. Wir verwenden Standardklassen
InputStream
, aber mit der JSoup-Bibliothek könnte dies einfacher sein.Dies sind die Maven-Abhängigkeiten. Wir verwenden die Apache Commons-Bibliothek, um URL-Zeichenfolgen zu überprüfen.
Das
ReadWebPage
Servlet liest den Inhalt der angegebenen Webseite und sendet ihn im Nur-Text-Format an den Client zurück. Die Aufgabe des Lesens der Seite wird an delegiertWebPageReader
.WebPageReader
Überprüft die URL und liest den Inhalt der Webseite. Es wird eine Zeichenfolge zurückgegeben, die den HTML-Code der Seite enthält.Schließlich ist dies die Homepage, die das HTML-Formular enthält. Dies stammt aus meinem Tutorial zu diesem Thema.
quelle