Java中的URI和URL是兩種常用的表示資源的格式,但它們又有所區別。
URI(Uniform Resource Identifier,統一資源標識符)是一個字符串序列,用于標識互聯網上的資源。它的語法包括了scheme、authority、path、query、fragment等組成部分。其中,scheme指定了訪問資源所使用的協議,如http、ftp等;authority指定了訪問資源所用的服務器地址和端口號;path指定了資源在服務器上的位置;query指定查詢字符串,用于向服務器提交參數;fragment指定了資源在文檔中的位置,如HTML文檔中的錨點。
URI uri = new URI("http://www.example.com/path/to/resource?key=value#fragment"); String scheme = uri.getScheme(); //"http" String host = uri.getHost(); //"www.example.com" int port = uri.getPort(); //-1 String path = uri.getPath(); //"/path/to/resource" String query = uri.getQuery(); //"key=value" String fragment = uri.getFragment(); //"fragment"
URL(Uniform Resource Locator,統一資源定位器)是一種URI的子類,它在表示一個Web資源時,包括了網絡傳輸協議、服務器地址、端口號、資源路徑等信息。與URI不同,URL還提供了用于打開連接、讀取內容的方法,因此可以作為I/O操作的源或目標。
URL url = new URL("http://www.example.com/path/to/resource?key=value#fragment"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.connect(); InputStream is = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); conn.disconnect();
需要注意的是,URL和URI的區別并不是很明顯,有時甚至可以相互替代。如果只是表示一個資源標識符,那么使用URI就足夠了;如果需要進行網絡傳輸、I/O操作,那么就需要使用URL。