web-dev-qa-db-fra.com

Vérifiez si le fichier existe sur le serveur distant à l'aide de son URL

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.

58
Rui
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.

Source: http://www.rgagnon.com/javadetails/Java-0059.html

91
Adam
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érifier si une URL existe ou non

14
Jigar Joshi

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();
            }                  
    }           
}
}
4
Ishtiyaq Husain

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é.

4
Mike Tunnicliffe

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.

3
Mihai Toader

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.

0
rfeak