Java URL
Java网络教程 - Java URL
绝对URI具有以下通用格式:
scheme:scheme-specific-part scheme-specific-part 取决于 scheme 。
例如,httpscheme使用一种格式,并且mailtoscheme使用另一种格式。
URI的另一个通用形式如下,它表示一个URL。
scheme://<authority><path>?<query>#<fragment>
scheme访问资源的方法。
它是协议名称,如http,ftp等。
URI中的 scheme 和 path 部分是必需的。所有其他部分均为可选。
path部分可以是空字符串。权限部分指示服务器名称或IP地址。
如果权限部分表示服务器名称,则它可以是 userinfo @ host:port 的形式。
例如,标识本地文件系统中的文件的URL使用文件方案作为file:///c:/documents/java.doc。
URL
URI语法在其 path 部分中使用分层语法。
path的多个部分由正斜杠(/)分隔。
query 部分指示通过执行指定的查询获得资源。
它由名称 - 值对组成,用&符号分隔。
名称和值由等号=分隔。
例如, id = 123& num = 5 是一个查询,它有两个部分,id和num。id的值为123,num的值为5。
fragment 部分标识辅助资源,通常是子集由URI的另一部分标识的主资源。
下面是一个URI的例子,它也被分成几部分:
URI: //www.w3cschool.cn/java/a.html?id=123#abc Scheme: http Authority: www.w3cschool.cn Path: /java/a.html Query: id=123 Fragment: abc
要在URI中使用空格字符,请使用%20,这是空格的转义形式。
使用%25表示URI中的%字符。
例如,要在查询中使用5.2%的值
//www.w3cschool.cn/details?rate=5.2%25
Java URI类
Java表示一个URI和一个URL作为对象。
它提供以下四个类,您可以使用它们将URI和URL用作Java程序中的对象:
java.net.URI java.net.URL java.net.URLEncoder java.net.URLDecoder
以下代码创建一个URI对象。
URI baseURI = new URI("http://www.www.w3cschool.cn");
要创建具有相对URI字符串的URI,并使用baseURI解析它
URI baseURI = new URI("http://www.www.w3cschool.cn");
URI relativeURI = new URI("welcome.html");
URI resolvedRelativeURI = baseURI.resolve(relativeURI);
完整代码
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String baseURIStr = "http://www.www.w3cschool.cn/a/b/c/index.html?id=1&rate=5%25#foo";
String relativeURIStr = "../x/y/z/welcome.html";
URI baseURI = new URI(baseURIStr);
URI relativeURI = new URI(relativeURIStr);
URI resolvedURI = baseURI.resolve(relativeURI);
printURIDetails(baseURI);
printURIDetails(relativeURI);
printURIDetails(resolvedURI);
}
public static void printURIDetails(URI uri) {
System.out.println("URI:" + uri);
System.out.println("Normalized:" + uri.normalize());
String parts = "[Scheme=" + uri.getScheme() + ", Authority="
+ uri.getAuthority() + ", Path=" + uri.getPath() + ", Query:"
+ uri.getQuery() + ", Fragment:" + uri.getFragment() + "]";
System.out.println(parts);
System.out.println();
}
}
上面的代码生成以下结果。

我们可以使用它的toURL()方法从URI对象中获取一个URL对象,如下所示:
URL baseURL = baseURI.toURL();
例2
演示java.net.URL类的使用的示例类
import java.net.URL;
public class Main {
public static void main(String[] args) throws Exception {
String baseURLStr = "http://www.ietf.org/rfc/rfc3986.txt";
String relativeURLStr = "rfc2732.txt";
URL baseURL = new URL(baseURLStr);
URL resolvedRelativeURL = new URL(baseURL, relativeURLStr);
System.out.println("Base URL:" + baseURL);
System.out.println("Relative URL String:" + relativeURLStr);
System.out.println("Resolved Relative URL:" + resolvedRelativeURL);
}
}
上面的代码生成以下结果。

URLEncoder和URLDecoder
URLEncoder和URLDecoder类分别用于对字符串进行编码和解码。
import java.net.URLDecoder;
import java.net.URLEncoder;
public class Main {
public static void main(String[] args) throws Exception {
String source = "index&^%*a test for 2.5% and &";
String encoded = URLEncoder.encode(source, "utf-8");
String decoded = URLDecoder.decode(encoded, "utf-8");
System.out.println("Source: " + source);
System.out.println("Encoded: " + encoded);
System.out.println("Decoded: " + decoded);
}
}
上面的代码生成以下结果。

例3
访问URL的内容
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class Main {
public static String getURLContent(String urlStr) throws Exception {
BufferedReader br = null;
URL url = new URL(urlStr);
InputStream ins = url.openStream();
br = new BufferedReader(new InputStreamReader(ins));
StringBuilder sb = new StringBuilder();
String msg = null;
while ((msg = br.readLine()) != null) {
sb.append(msg);
sb.append("\n"); // Append a new line
}
br.close();
return sb.toString();
}
public static void main(String[] args) throws Exception {
String urlStr = "http://www.w3cschool.cn";
String content = getURLContent(urlStr);
System.out.println(content);
}
}
上面的代码生成以下结果。
例4
向/从URL写入/读取数据的URL读取器/写入器类。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;
public class Main {
public static String getURLContent(String urlStr)
throws Exception {
URL url = new URL(urlStr);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
connection.connect();
OutputStream ous = connection.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(ous));
bw.write("index.html");
bw.flush();
bw.close();
printRequestHeaders(connection);
InputStream ins = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(ins));
StringBuffer sb = new StringBuffer();
String msg = null;
while ((msg = br.readLine()) != null) {
sb.append(msg);
sb.append("\n"); // Append a new line
}
br.close();
return sb.toString();
}
public static void printRequestHeaders(URLConnection connection) {
Map headers = connection.getHeaderFields();
System.out.println(headers);
}
public static void main(String[] args) throws Exception {
String urlStr = "http://www.www.w3cschool.cn";
String content = getURLContent(urlStr);
System.out.println(content);
}
}
上面的代码生成以下结果。

Jar URLConnection
以下代码显示了如何获取JarURLConnection对象。
使用其方法来获取JAR特定数据。
String str = "jar:http://yoursite.com/my.jar!/my/Abc.class"; URL url = new URL(str); JarURLConnection connection = (JarURLConnection)url.openConnection();

免费 AI IDE


更多建议: