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);
}
上一篇: JavaScript 异步 & Promise 学习心得
下一篇: ensp链路聚合
推荐阅读
-
【转】字符编码笔记:ASCII,Unicode和UTF-8
-
struts2+Spring3+hibernate3零配置并且正式环境和开发环境不需要多大改动 Struts
-
如何利用html和css来实现注册表单的简单实例
-
【转】字符编码笔记:ASCII,Unicode和UTF-8
-
关于多维数组降维、深度和获取父键的问题
-
php日期格式 php实现常见图片格式的水印和缩略图制作面向对象
-
数据库同步过程中一致性和完整性的保证
-
php inc文件使用的风险和注意事项_PHP
-
关于原型链,原来这么简单?—————终结__proto__和prototype的那些事
-
Oracle中sys和system用户权限的区别