Проверьте, существует ли файл на удаленном сервере, используя его URL [дубликат]
этот вопрос уже есть ответ здесь:
Как я могу проверить Java, если файл существует на удаленном сервере (обслуживается HTTP), имея его URL? Я не хочу скачивать файл, просто проверьте его существование.
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 метод запроса головы чтобы проверить, если он существует.
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; } }
предполагая, что файл обслуживается через 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 для фактических технических деталей о том, как это сделать.