URL和URI

    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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值