Table of Contents
ToggleJava 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 等操作範例。