Java URL

2018-02-28 16:39 更新

Java網(wǎng)絡(luò)教程 - Java URL


絕對(duì)URI具有以下通用格式:

scheme:scheme-specific-part

scheme-specific-part 取決于 scheme

例如,httpscheme使用一種格式,并且mailtoscheme使用另一種格式。

URI的另一個(gè)通用形式如下,它表示一個(gè)URL。

scheme://<authority><path>?<query>#<fragment>

scheme訪問資源的方法。

它是協(xié)議名稱,如http,ftp等。

URI中的 scheme path 部分是必需的。所有其他部分均為可選。

 path部分可以是空字符串。權(quán)限部分指示服務(wù)器名稱或IP地址。

如果權(quán)限部分表示服務(wù)器名稱,則它可以是 userinfo @ host:port 的形式。

例如,標(biāo)識(shí)本地文件系統(tǒng)中的文件的URL使用文件方案作為file:///c:/documents/java.doc


URL

URI語法在其 path 部分中使用分層語法。

path的多個(gè)部分由正斜杠(/)分隔。

query 部分指示通過執(zhí)行指定的查詢獲得資源。

它由名稱 - 值對(duì)組成,用&符號(hào)分隔。

名稱和值由等號(hào)=分隔。

例如, id = 123& num = 5 是一個(gè)查詢,它有兩個(gè)部分,id和num。id的值為123,num的值為5。

fragment 部分標(biāo)識(shí)輔助資源,通常是子集由URI的另一部分標(biāo)識(shí)的主資源。

下面是一個(gè)URI的例子,它也被分成幾部分:

URI:        //o2fo.com/java/a.html?id=123#abc
Scheme:     http 
Authority:  o2fo.com 
Path:       /java/a.html 
Query:      id=123
Fragment:   abc

要在URI中使用空格字符,請(qǐng)使用%20,這是空格的轉(zhuǎn)義形式。

使用%25表示URI中的%字符。

例如,要在查詢中使用5.2%的值

//o2fo.com/details?rate=5.2%25

Java URI類

Java表示一個(gè)URI和一個(gè)URL作為對(duì)象。

它提供以下四個(gè)類,您可以使用它們將URI和URL用作Java程序中的對(duì)象:

java.net.URI
java.net.URL
java.net.URLEncoder
java.net.URLDecoder

以下代碼創(chuàng)建一個(gè)URI對(duì)象。

URI baseURI  = new URI("http://www.o2fo.com");

要?jiǎng)?chuàng)建具有相對(duì)URI字符串的URI,并使用baseURI解析它

URI baseURI  = new URI("http://www.o2fo.com");
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.o2fo.com/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();
  }
}

上面的代碼生成以下結(jié)果。

我們可以使用它的toURL()方法從URI對(duì)象中獲取一個(gè)URL對(duì)象,如下所示:

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);
  }
}

上面的代碼生成以下結(jié)果。

URLEncoder和URLDecoder

URLEncoder和URLDecoder類分別用于對(duì)字符串進(jìn)行編碼和解碼。

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);

  }
}

上面的代碼生成以下結(jié)果。

例3

訪問URL的內(nèi)容

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://o2fo.com";
    String content = getURLContent(urlStr);
    System.out.println(content);
  }
}

上面的代碼生成以下結(jié)果。

例4

向/從URL寫入/讀取數(shù)據(jù)的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.o2fo.com";
    String content = getURLContent(urlStr);
    System.out.println(content);
  }
}

上面的代碼生成以下結(jié)果。

Jar URLConnection

以下代碼顯示了如何獲取JarURLConnection對(duì)象。

使用其方法來獲取JAR特定數(shù)據(jù)。

String str = "jar:http://yoursite.com/my.jar!/my/Abc.class"; 
URL  url = new URL(str);
JarURLConnection  connection = (JarURLConnection)url.openConnection();
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)