Comment puis-je vérifier Java si un fichier existe sur un serveur distant (servi par HTTP), ayant son URL? Je ne veux pas télécharger le fichier, vérifiez simplement son existence.
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 ( établie avec HttpURLConnection ) renvoie avec code d'état HTTP 2 alors le fichier existe.
EDIT: Notez que puisque nous nous soucions seulement qu'il existe ou non, il n'est pas nécessaire de demander l'intégralité du document. Nous pouvons simplement demander l'en-tête en utilisant le HTTP méthode de demande 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;
}
}
Vérifiez cela, cela fonctionne pour moi. URL source: Vérifiez si l'URL existe ou non sur le serveur
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String customURL = "http://www.desicomments.com/dc3/08/273858/273858.jpg";
MyTask task = new MyTask();
task.execute(customURL);
}
private class MyTask extends AsyncTask<String, Void, Boolean> {
@Override
protected void onPreExecute() {
}
@Override
protected Boolean doInBackground(String... params) {
try {
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con = (HttpURLConnection) new URL(params[0]).openConnection();
con.setRequestMethod("HEAD");
System.out.println(con.getResponseCode());
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
boolean bResponse = result;
if (bResponse==true)
{
Toast.makeText(MainActivity.this, "File exists!", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(MainActivity.this, "File does not exist!", Toast.LENGTH_SHORT).show();
}
}
}
}
En supposant que le fichier est servi via http, vous pouvez envoyer une demande HEAD à l'URL et vérifier le code de réponse http renvoyé.
Le seul vrai moyen est de le télécharger :). Sur certains serveurs, vous pouvez généralement vous en sortir en émettant une demande HEAD insted d'une demande GET pour la même URL. Cela vous renverra uniquement les métadonnées de la ressource et non le contenu du fichier réel.
Mise à jour: Vérifiez la réponse de org.life.Java pour les détails techniques réels sur la façon de procéder.
Faites-y une connexion URLConnection. Si vous réussissez, cela existe. Vous devrez peut-être aller jusqu'à lui ouvrir un flux d'entrée, mais vous n'avez pas à lire le contenu. Vous pouvez immédiatement fermer le flux.