使用URL检查远程服务器上是否存在文件

时间:2011-01-04 17:18:05

标签: java http networking url file-exists

如果远程服务器(由HTTP提供服务)上存在文件,如果有URL,我如何检查Java?我不想下载文件,只检查它的存在。

6 个答案:

答案 0 :(得分:89)

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;
    }
  }

如果与网址(made with HttpURLConnection)的连接返回HTTP status code 200,则该文件存在。

编辑:请注意,由于我们只关心它是否存在,因此无需请求整个文档。我们可以使用HTTP HEAD request method请求标头来检查它是否存在。

来源:http://www.rgagnon.com/javadetails/java-0059.html

答案 1 :(得分:14)

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;
    }
  }  

Checking if a URL exists or not

答案 2 :(得分:4)

假设文件是​​通过http提供的,您可以向URL发送HEAD请求并检查返回的http响应代码。

答案 3 :(得分:4)

检查一下,它对我有用。来源网址:Check if URL exists or not on Server

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();
            }                  
    }           
}
}

答案 4 :(得分:3)

唯一真正的方法是下载它:)。在某些服务器上,通常可以通过发出针对同一URL的GET请求的HEAD请求来逃避。这将仅返回资源元数据而不返回实际文件内容。

更新:检查org.life.java的答案,了解有关如何执行此操作的实际技术细节。

答案 5 :(得分:0)

对它进行URLConnection。如果你成功了,它就存在了。您可能不得不打开输入流,但您不必阅读内容。您可以立即关闭该流。