如果远程服务器(由HTTP提供服务)上存在文件,如果有URL,我如何检查Java?我不想下载文件,只检查它的存在。
答案 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请求标头来检查它是否存在。
答案 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;
}
}
答案 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。如果你成功了,它就存在了。您可能不得不打开输入流,但您不必阅读内容。您可以立即关闭该流。