63

ファイルがリモートサーバー (HTTP によって提供される) に存在し、その URL を持っているかどうかを Java で確認するにはどうすればよいですか? ファイルをダウンロードしたくありません。その存在を確認するだけです。

4

6 に答える 6

101
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で返された場合、ファイルは存在します。

編集:存在するかどうかのみを気にするため、ドキュメント全体を要求する必要はないことに注意してください。HTTP HEAD リクエスト メソッドを使用してヘッダーをリクエストするだけで、ヘッダーが存在するかどうかを確認できます。

ソース: http://www.rgagnon.com/javadetails/java-0059.html

于 2011-01-04T17:22:03.000 に答える
16
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 が存在するかどうかの確認

于 2011-01-04T17:20:57.123 に答える
5

これをチェックしてください、それは私のために働きます。ソース 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();
            }                  
    }           
}
}
于 2015-11-03T09:56:19.593 に答える
4

ファイルが http を介して提供されていると仮定すると、HEAD 要求を URL に送信し、返された http 応答コードを確認できます。

于 2011-01-04T17:20:04.360 に答える
3

唯一の本当の方法は、それをダウンロードすることです:)。一部のサーバーでは通常、同じ URL に対して GET リクエストではなく HEAD リクエストを発行することで回避できます。これにより、実際のファイル コンテンツではなく、リソース メタデータのみが返されます。

更新: これを行う方法に関する実際の技術的な詳細については、org.life.java の回答を確認してください。

于 2011-01-04T17:19:50.900 に答える
0

それに URLConnection を作成します。成功すれば、それは存在します。入力ストリームを開くところまで行く必要があるかもしれませんが、内容を読む必要はありません。すぐにストリームを閉じることができます。

于 2011-01-04T17:20:09.270 に答える