最近项目遇到需要从http请求下载文件到服务器,下载前需要判断下http中的文件是否存在。如果判断本地服务器上文件是否存在,用file.exists来判断。但是这个方法却无法判断http中文件是否存在。
如果要判断http文件是否存在,用如下代码:
java
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
public static void main(String[] args) {
String urlString = "http://example.com/file.txt";
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("HEAD");
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
System.out.println("文件存在");
} else {
System.out.println("文件不存在");
}
} catch (IOException e) {
System.out.println("连接失败");
}
}
}
如果对方系统需要身份验证,那么需要加如下代码。我们系统是需要token验证。加权限验证的代码如下:
java
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
public static void main(String[] args) {
String urlString = "http://example.com/file.txt";
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//权限校验
connection.setRequestProperty("X-JFrog-Art-Api","cmv125VmedaeDAFdafLFAF2ed");
//HEAD请求,不返回响应体,但是有些服务器可能不支持,则改成GET请求
connection.setRequestMethod("HEAD");
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
System.out.println("文件存在");
} else {
System.out.println("文件不存在");
}
} catch (IOException e) {
System.out.println("连接失败");
}
}
}
判断http中文件是否存在可以利用java.nio的方法,代码如下:
java
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) {
String urlString = "http://example.com/file.txt";
try {
URL url = new URL(urlString);
Path path = Paths.get(url.toURI());
if (Files.exists(path)) {
System.out.println("文件存在");
} else {
System.out.println("文件不存在");
}
} catch (IOException e) {
System.out.println("连接失败");
}
}
}