2011-01-04 17 views

Respuesta

81
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 conexión a un URL (made with HttpURLConnection) regresa con HTTP status code 200 entonces existe el archivo.

EDIT: Tenga en cuenta que ya que solo nos importa si existe o no, no hay necesidad de solicitar el documento completo. Solo podemos solicitar el encabezado con HTTP HEAD request method para verificar si existe.

Fuente: http://www.rgagnon.com/javadetails/java-0059.html

+0

¿tenemos que configurar las líneas mencionadas en la nota (líneas comentadas)? –

+3

Quiero mencionar esto: El servidor necesita manejar las solicitudes HEAD para que esto funcione. – imdhmd

+0

cuando tengo un carácter especial como 'Ü' en el nombre del archivo y lo analizo con URLEncoder.encode (nombre de archivo, "UTF-8"), ¿me dice que el archivo no existe? – Niko

3

La única manera verdadera es descargarlo :). En algunos servidores, por lo general, puede salirse emitiendo una solicitud HEAD en respuesta a una solicitud GET para la misma URL. Esto le devolverá solo los metadatos de recursos y no el contenido real del archivo.

Actualización: Compruebe la respuesta de org.life.java para obtener los detalles técnicos reales sobre cómo hacer esto.

4

Suponiendo que el archivo se está sirviendo a través de http, puede enviar una solicitud HEAD a la URL y verificar el código de respuesta http devuelto.

0

Realice un URLConnection a él. Si tienes éxito, existe. Puede que tenga que abrir una secuencia de entrada, pero no tiene que leer el contenido. Puedes cerrar inmediatamente la transmisión.

+0

Las implementaciones de InputStream pueden no necesariamente leer en el lado del servidor, por lo que es posible que todavía no existan. –

14
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; 
    } 
    } 

Checking if a URL exists or not

4

comprobar esto, a mí me funciona. Fuente URL: Check if URL exists or not on Server

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(); 
      }     
    }   
} 
} 
+0

Esta es una solución relacionada con Android. OP no pidió una solución para Android. –

Cuestiones relacionadas