Comment obtenir un InputStream à partir d'une URL?
par exemple, je veux prendre le fichier à l'url wwww.somewebsite.com/a.txt
et le lire comme un InputStream en Java, via un servlet.
J'ai essayé
InputStream is = new FileInputStream("wwww.somewebsite.com/a.txt");
mais ce que j'ai obtenu était une erreur:
java.io.FileNotFoundException
java
url
inputstream
Ours blanc
la source
la source
servlets
balise? Il n'y a pas d'javax.servlet.*
API impliquée ici. Vous auriez exactement le même problème en le faisant dans une classe Java simple avec unemain()
méthode.Réponses:
Utilisez
java.net.URL#openStream()
avec une URL appropriée (y compris le protocole!). Par exempleVoir également:
la source
Essayer:
la source
(a)
wwww.somewebsite.com/a.txt
n'est pas une 'URL de fichier'. Ce n'est pas du tout une URL. Si vous le mettezhttp://
en avant, ce serait une URL HTTP, ce qui est clairement ce que vous prévoyez ici.(b)
FileInputStream
concerne les fichiers, pas les URL.(c) Le moyen d'obtenir un flux d'entrée à partir de n'importe quelle URL est via
URL.openStream(),
ouURL.getConnection().getInputStream(),
qui est équivalent, mais vous pourriez avoir d'autres raisons d'obtenir leURLConnection
et de jouer avec d'abord.la source
Votre code d'origine utilise FileInputStream, qui permet d'accéder aux fichiers hébergés dans le système de fichiers.
Le constructeur que vous avez utilisé tentera de localiser un fichier nommé a.txt dans le sous-dossier www.somewebsite.com du répertoire de travail actuel (la valeur de la propriété système user.dir). Le nom que vous fournissez est résolu en fichier à l'aide de la classe File.
Les objets URL sont le moyen générique de résoudre ce problème. Vous pouvez utiliser des URL pour accéder aux fichiers locaux mais également aux ressources hébergées sur le réseau. La classe URL prend en charge le protocole file: // en plus de http: // ou https: // donc vous êtes prêt à partir.
la source
Java pur:
Avec un certain succès, j'utilise cette méthode. Il gère les redirections et on peut passer un nombre variable d' en-têtes HTTP comme
Map<String,String>
. Il permet également les redirections de HTTP vers HTTPS .Exemple d'appel complet
la source
HttpURLConnection
suivra déjà les redirections à moins que vous ne lui disiez de ne pas le faire, ce que vous n'avez pas fait.HttpURLConnection
suit déjà les redirections par défaut, comme je l'ai déjà dit.Voici un exemple complet qui lit le contenu de la page Web donnée. La page Web est lue à partir d'un formulaire HTML. Nous utilisons des
InputStream
classes standard , mais cela pourrait être fait plus facilement avec la bibliothèque JSoup.Ce sont les dépendances Maven. Nous utilisons la bibliothèque Apache Commons pour valider les chaînes d'URL.
Le
ReadWebPage
servlet lit le contenu de la page Web donnée et le renvoie au client au format texte brut. La tâche de lecture de la page est déléguée àWebPageReader
.WebPageReader
valide l'URL et lit le contenu de la page Web. Il renvoie une chaîne contenant le code HTML de la page.Enfin, c'est la page d'accueil contenant le formulaire HTML. Ceci est tiré de mon tutoriel sur ce sujet.
la source