Comment puis-je vérifier en Java si un fichier existe sur un serveur distant (servi par HTTP), en ayant son URL ? Je ne veux pas télécharger le fichier, juste vérifier son existence.
Réponses
Trop de publicités?import java.net.*;
import java.io.*;
public static boolean exists(String URLName){
try {
HttpURLConnection.setFollowRedirects(false);
// note : you may also need
// HttpURLConnection.setInstanceFollowRedirects(false)
HttpURLConnection con =
(HttpURLConnection) new URL(URLName).openConnection();
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
Si la connexion à une URL ( réalisé avec HttpURLConnection ) revient avec Code d'état HTTP 200 alors le fichier existe.
EDIT : Notez que puisque nous ne nous intéressons qu'à son existence, il n'est pas nécessaire de demander le document entier. Nous pouvons simplement demander l'en-tête en utilisant la méthode HTTP Méthode de requête HEAD pour vérifier s'il existe.
public static boolean exists(String URLName){
try {
HttpURLConnection.setFollowRedirects(false);
// note : you may also need
// HttpURLConnection.setInstanceFollowRedirects(false)
HttpURLConnection con =
(HttpURLConnection) new URL(URLName).openConnection();
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
Le seul vrai moyen est de le télécharger :). Sur certains serveurs, vous pouvez généralement vous en sortir en envoyant une requête HEAD au lieu d'une requête GET pour la même url. Cela vous renverra uniquement les métadonnées de la ressource et non le contenu réel du fichier.
Mise à jour : consultez la réponse de org.life.java pour obtenir les détails techniques sur la façon de procéder.