Java URI Class - Java 147

Java URI Class – Java 147

Java URI Class

統一資源識別碼 URI ,允許完整標識任何抽象或物理資源的字元序列,因 URL 是 URI 的子集,所以可以轉換成為 URL , URI Class 介紹常見的 toURL 、 compareTo 、 isAbsolute 、 isOpaque 等方法,本篇增加了範例,並透過單元測試來驗證產出結果。

可以將 URI 轉換成 URL , URL 都必須是以下任一方案開頭:
ftp
http
https
gopher
mailto
news
nntp
telnet
wais
file
prospero

檔案目錄

./
   +- src
       +- test
       |   +- org
       |       +- ruoxue
       |           +- java_147
       |               +- net
       |                   +- uri
       |                       +- URIClassTest.java   

單元測試

URI Class Java 提供轉換、比較等操作 URI 。

toURL

URI Class Java 建立一個 URI ,轉換成 URL 。

	@Test
	public void toURL() {
		try {
			URI uri = URI.create("https://www.ruoxue.org");
			URL url = uri.toURL();
			System.out.println(url);
			assertThat(url.toString()).isEqualTo(uri.toString());
			
			uri = URI.create("mailto:ruoxueorg@gmail.com");
			url = uri.toURL();
			System.out.println(url);
			assertThat(url.toString()).isEqualTo(uri.toString());
		} catch (MalformedURLException ex) {
			throw new RuntimeException(ex.getMessage(), ex);
		}
	}
https://www.ruoxue.org
mailto:ruoxueorg@gmail.com

toURLThrowException

URI Class Java 建立一個 URI ,傳入無法辨識的字串,會拋出例外。

	@Test
	public void toURLThrowException() {
		assertThatCode(() -> {
			URI uri = URI.create("urn:isbn:1234567890+%25");
			System.out.println(uri);
			URL url = uri.toURL();
			System.out.println(url);
		}).isInstanceOf(MalformedURLException.class);
	}

compareTo

URI Class Java 建立兩個 URI ,比較是否相等。

	@Test
	public void compareTo() {
		URI uri = URI.create("https://www.ruoxue.org");
		System.out.println(uri);
		URI uri2 = URI.create("https://WWW.RUOXUE.ORG");
		System.out.println(uri2);
		int result = uri.compareTo(uri2);
		System.out.println(result);
		assertThat(result).isZero();

		uri = URI.create("https://www.ruoxue.org?s=a");
		System.out.println(uri);
		uri2 = URI.create("https://www.ruoxue.org?s=%61");
		System.out.println(uri2);
		result = uri.compareTo(uri2);
		System.out.println(result);
		assertThat(result).isGreaterThan(0);
	}
https://www.ruoxue.org
https://WWW.RUOXUE.ORG
0
https://www.ruoxue.org?s=a
https://www.ruoxue.org?s=%61
60

isAbsolute

URI Class Java 建立一個 URI ,判斷是否絕對資源。

	@Test
	public void isAbsolute() {
		URI uri = URI.create("https://www.ruoxue.org");
		System.out.println(uri);
		boolean result = uri.isAbsolute();
		System.out.println(result + ", getScheme: " + uri.getScheme());
		assertThat(result).isTrue();

		uri = URI.create("java-net");
		System.out.println(uri);
		result = uri.isAbsolute();
		System.out.println(result + ", getScheme: " + uri.getScheme());
		assertThat(result).isFalse();
	}
https://www.ruoxue.org
true, getScheme: https
java-net
false, getScheme: null

isOpaque

URI Class in Java 建立一個 URI ,判斷是否不透明。

	@Test
	public void isOpaque() {
		URI uri = URI.create("file:localhost/README.md");
		System.out.println(uri);
		boolean result = uri.isOpaque();
		System.out.println(result + ", getPath: " + uri.getPath());
		assertThat(result).isTrue();

		uri = URI.create("file:///README.md"); // equals to: uri = URI.create("file://localhost/README.md");
		System.out.println(uri);
		result = uri.isOpaque();
		System.out.println(result + ", getPath: " + uri.getPath());
		assertThat(result).isFalse();
	}
file:localhost/README.md
true, getPath: null
file:///README.md
false, getPath: /README.md

URIClassTest.java

URI Class in Java 新增單元測試,驗證 Java URI Class Example 是否符合預期。

package org.ruoxue.java_147.net.uri;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;

import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;

import org.junit.Test;

public class URIClassTest {

	@Test
	public void toURL() {
		try {
			URI uri = URI.create("https://www.ruoxue.org");
			URL url = uri.toURL();
			System.out.println(url);
			assertThat(url.toString()).isEqualTo(uri.toString());
			
			uri = URI.create("mailto:ruoxueorg@gmail.com");
			url = uri.toURL();
			System.out.println(url);
			assertThat(url.toString()).isEqualTo(uri.toString());
		} catch (MalformedURLException ex) {
			throw new RuntimeException(ex.getMessage(), ex);
		}
	}

	@Test
	public void toURLThrowException() {
		assertThatCode(() -> {
			URI uri = URI.create("urn:isbn:1234567890+%25");
			System.out.println(uri);
			URL url = uri.toURL();
			System.out.println(url);
		}).isInstanceOf(MalformedURLException.class);
	}

	@Test
	public void compareTo() {
		URI uri = URI.create("https://www.ruoxue.org");
		System.out.println(uri);
		URI uri2 = URI.create("https://WWW.RUOXUE.ORG");
		System.out.println(uri2);
		int result = uri.compareTo(uri2);
		System.out.println(result);
		assertThat(result).isZero();

		uri = URI.create("https://www.ruoxue.org?s=a");
		System.out.println(uri);
		uri2 = URI.create("https://www.ruoxue.org?s=%61");
		System.out.println(uri2);
		result = uri.compareTo(uri2);
		System.out.println(result);
		assertThat(result).isGreaterThan(0);
	}

	@Test
	public void isAbsolute() {
		URI uri = URI.create("https://www.ruoxue.org");
		System.out.println(uri);
		boolean result = uri.isAbsolute();
		System.out.println(result + ", getScheme: " + uri.getScheme());
		assertThat(result).isTrue();

		uri = URI.create("java-net");
		System.out.println(uri);
		result = uri.isAbsolute();
		System.out.println(result + ", getScheme: " + uri.getScheme());
		assertThat(result).isFalse();
	}

	@Test
	public void isOpaque() {
		URI uri = URI.create("file:localhost/README.md");
		System.out.println(uri);
		boolean result = uri.isOpaque();
		System.out.println(result + ", getPath: " + uri.getPath());
		assertThat(result).isTrue();

		uri = URI.create("file:///README.md"); // equals to: uri = URI.create("file://localhost/README.md");
		System.out.println(uri);
		result = uri.isOpaque();
		System.out.println(result + ", getPath: " + uri.getPath());
		assertThat(result).isFalse();
	}
}

心得分享

Java URI Class Example 統一資源識別碼,是用於標識特定資源的字元序列,允許使用特定協定在網路上進行資源表示的互動, URI Class in Java 提供 toURL 、 compareTo 、 isAbsolute 、 isOpaque 等操作範例。

發佈留言