工程中用到一点通过HTTP读取文件的需求,一点样例代码。
因为URL中不含有文件名,所以通过解析HTTP请求读取文件名。
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public void download(String s) throws Exception {
URL url = new URL(s);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
// 打印HTTP header
Map headers = conn.getHeaderFields();
Set<String> keys = headers.keySet();
for(String key : keys) {
System.out.println(key + " ----------------------------- " + conn.getHeaderField(key));
}
// 转换编码
String contentDisposition = URLDecoder.decode(conn.getHeaderField("content-Disposition"), "UTF-8");
System.out.println(contentDisposition);
// 匹配文件名
Pattern pattern = Pattern.compile(".*fileName=(.*)");
Matcher matcher = pattern.matcher(contentDisposition);
System.out.println(matcher.groupCount());
System.out.println(matcher.matches());
System.out.println(matcher.group(1));
String filename = matcher.group(1);
// 写盘
RandomAccessFile file = new RandomAccessFile("D:/" + filename, "rw");
InputStream stream = conn.getInputStream();
byte buffer[] = new byte[1024];
while (true) {
int len = stream.read(buffer);
if (len == -1) {
break;
}
file.write(buffer, 0, len);
}
if (file != null) {
file.close();
}
if (stream != null) {
stream.close();
}
}
public static void main(String[] args) throws Exception{
Test test = new Test();
test.download("http://182.168.0.39:9099/fileupload/OA_FlowFJ_Download.do?tid=947810&tmp=1494918762208");
}
}