Подтвердить что ты не робот

Проверьте, существует ли файл на удаленном сервере, используя его URL-адрес

Как я могу проверить Java, если файл существует на удаленном сервере (обслуживается HTTP), имея свой URL? Я не хочу загружать файл, просто проверьте его существование.

4b9b3361

Ответ 1

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

Если соединение с URL-адресом (с HttpURLConnection) возвращается с HTTP status code 200, то файл существует.

РЕДАКТИРОВАТЬ: Обратите внимание, что, поскольку мы заботимся только об этом, нет необходимости запрашивать весь документ. Мы можем просто запросить заголовок, используя HTTP метод запроса HEAD, чтобы проверить, существует ли он.

Источник: http://www.rgagnon.com/javadetails/java-0059.html

Ответ 2

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

Проверка наличия или отсутствия URL

Ответ 3

Предполагая, что файл обслуживается через http, вы можете отправить запрос HEAD на URL-адрес и проверить возвращаемый код ответа HTTP.

Ответ 4

Проверьте это, это работает для меня. Исходный URL: Проверить, существует ли URL-адрес на сервере

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

Ответ 5

Единственный верный способ - загрузить его:). На некоторых серверах обычно вы можете уйти, выпустив запрос HEAD, запрошенный GET-запросом для того же URL-адреса. Это вернет вам только метаданные ресурсов, а не фактическое содержимое файла.

Обновление: Проверьте ответ org.life.java на фактические технические данные о том, как это сделать.

Ответ 6

Сделайте для него URLConnection. Если вам это удается, оно существует. Возможно, вам придется зайти так далеко, как открыть входной поток, но вам не нужно читать содержимое. Вы можете сразу закрыть поток.