欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

URL和URI

程序员文章站 2022-03-10 18:25:38
...
    private static void getDataFromURL() throws MalformedURLException, IOException
{
// System.getProperties().put("http.proxyHost", "someProxyURL");
// System.getProperties().put("http.proxyPort", "someProxyPort");

URL url = new URL("http://liuxi1024.iteye.com/blog/519047");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();

// 设置用户代理头字段,不然iteye.com站点不会给我们返回数据
httpConn.addRequestProperty("User-Agent", "Mozilla");
httpConn.connect();
// 获得所有响应头
Map<String, List<String>> headers = httpConn.getHeaderFields();
for (String key : headers.keySet())
{
System.out.println(key + ": " + headers.get(key));
if ("Content-Type".equalsIgnoreCase(key))
{
List<String> values = headers.get(key);
System.out.println("Found: " + values);
String contentType = values.get(0);
String[] parts = contentType.split(";");
String charset = "";
if (parts.length > 1)
{
charset = parts[1].trim();
charset = charset.substring(charset.lastIndexOf("=") + 1);
}
System.out.println("Charset: " + charset);
}
}
// 获得输入流
InputStream in = httpConn.getInputStream();
int data = 0;
while (-1 != (data = in.read()))
System.out.write(data);
System.out.flush();
in.close();
}

private static void getResource2() throws URISyntaxException
{
// URI 统一资源标识符 用于标识一个资源,只要用于资源的解析操作
// URL 统一资源定位符 用于定位一个资源,不仅可以用于解析资源,还可以获取一个资源的内容
URL url = URLOrURI.class.getResource("tu hao.txt");
// 结果:file:/C:/xxx/workspace/classloader/bin/com/classloader/tu%20hao.txt
// 会将返回结果中的空格、非ascii码字符进行转义
System.out.println(url);

URI uri = url.toURI();
// 结果:/C:/xxx/workspace/classloader/bin/com/classloader/tu hao.txt
// 如果要获得转义前的字符串,可以调用url的toURI获得对应的URI,然后调用getPath即可
// URI的getPath方法会将结果字符串进行解码
System.out.println(uri.getPath());

// 结果:file:/C:/xxx/workspace/classloader/bin/com/classloader/%e5%9c%9f%e8%b1%aa.txt
url = URLOrURI.class.getResource("土豪.txt");
System.out.println(url);
}

private static void getResource()
{
URL url = URLOrURI.class.getResource("/");
// 结果:file:/C:/xxx/workspace/classloader/bin/ 相对classpath根目录
// 如果classpath中还有其他目录存在当前项目的classes目录之前,
// 则会优先返回其他目录
// 由于class.getResource真正调用的是classloader.getResource,
// 而classloader.getResource又会委托给父classloader去查找resource
// 所以如果java/jdk**/jre下存在一个classes目录,
// 这个方法会返回java/jdk**/jre/classes目录
System.out.println(url);

url = URLOrURI.class.getResource("");
// 结果:file:/C:/xxx/workspace/classloader/bin/com/classloader/ 相对当前包目录
System.out.println(url);

url = URLOrURI.class.getClassLoader().getResource("");
// 结果:file:/C:/xxx/workspace/classloader/bin/ 相对classpath根目录
System.out.println(url);

url = URLOrURI.class.getClassLoader().getResource("/");
// 结果:null
System.out.println(url);
}
相关标签: url uri