【发布时间】:2011-06-03 13:04:48
【问题描述】:
如果文件存在于远程服务器上(由 HTTP 提供服务),我如何在 Java 中签入,并且有它的 URL?我不想下载文件,只是检查它的存在。
【问题讨论】:
-
此文件是否通过 http 提供服务?
标签: java http networking url file-exists
如果文件存在于远程服务器上(由 HTTP 提供服务),我如何在 Java 中签入,并且有它的 URL?我不想下载文件,只是检查它的存在。
【问题讨论】:
标签: java http networking url file-exists
检查一下,它对我有用。来源网址: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();
}
}
}
}
【讨论】:
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 (made with HttpURLConnection) 的连接返回 HTTP status code 200,则该文件存在。
编辑:请注意,由于我们只关心它是否存在,因此无需请求整个文档。我们可以只使用 HTTP HEAD request method 请求头来检查它是否存在。
【讨论】:
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;
}
}
【讨论】:
创建一个 URLConnection 到它。如果你成功了,它就存在。你可能不得不去打开一个输入流,但你不必阅读内容。您可以立即关闭流。
【讨论】:
假设文件是通过 http 提供的,您可以向 URL 发送 HEAD 请求并检查返回的 http 响应代码。
【讨论】:
唯一真正的方法是下载它:)。在某些服务器上,通常您可以通过发出 HEAD 请求来摆脱对同一 url 的 GET 请求。这将只返回资源元数据,而不是实际的文件内容。
更新:查看 org.life.java 的回答,了解如何执行此操作的实际技术细节。
【讨论】: