ファイルがリモートサーバー (HTTP によって提供される) に存在し、その URL を持っているかどうかを Java で確認するにはどうすればよいですか? ファイルをダウンロードしたくありません。その存在を確認するだけです。
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で返された場合、ファイルは存在します。
編集:存在するかどうかのみを気にするため、ドキュメント全体を要求する必要はないことに注意してください。HTTP HEAD リクエスト メソッドを使用してヘッダーをリクエストするだけで、ヘッダーが存在するかどうかを確認できます。
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:サーバー上に 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();
}
}
}
}
ファイルが http を介して提供されていると仮定すると、HEAD 要求を URL に送信し、返された http 応答コードを確認できます。
唯一の本当の方法は、それをダウンロードすることです:)。一部のサーバーでは通常、同じ URL に対して GET リクエストではなく HEAD リクエストを発行することで回避できます。これにより、実際のファイル コンテンツではなく、リソース メタデータのみが返されます。
更新: これを行う方法に関する実際の技術的な詳細については、org.life.java の回答を確認してください。
それに URLConnection を作成します。成功すれば、それは存在します。入力ストリームを開くところまで行く必要があるかもしれませんが、内容を読む必要はありません。すぐにストリームを閉じることができます。