Проверьте, существует ли файл на удаленном сервере, используя его 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 insted запроса GET для того же url. Это вернет вам только метаданные ресурса, а не фактическое содержимое файла.
Update: Проверьте организацию.жизнь.ответ java для фактических технических деталей о том, как это сделать.
сделайте URLConnection к нему. Если вы преуспеете, она существует. Возможно, вам придется зайти так далеко, чтобы открыть входной поток, но вам не нужно читать содержимое. Вы можете сразу же закрыть поток.