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


этот вопрос уже есть ответ здесь:

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

6 53

6 ответов:

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 200 затем файл существует.

EDIT: обратите внимание, что поскольку мы только заботимся о его существовании или нет, нет необходимости запрашивать весь документ. Мы можем просто запросить заголовок с помощью HTTP метод запроса головы чтобы проверить, если он существует.

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

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-адрес или нет

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

проверить это, это работает для меня. Источник:проверьте, существует ли 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();
            }                  
    }           
}
}

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

обновление: орг.жизнь.ответ java для фактических технических деталей о том, как это сделать.

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