我們可以基于它們的文本表示來比較兩個(gè)Path對(duì)象的相等性。
equals()方法通過比較它們的字符串形式來測(cè)試兩個(gè)Path對(duì)象的相等性。
等式測(cè)試是否區(qū)分大小取決于文件系統(tǒng)。
以下代碼顯示如何比較Windows路徑:
import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) throws Exception { Path p1 = Paths.get("C:\\Java_Dev\\test1.txt"); Path p2 = Paths.get("C:\\Java_Dev\\LUCI1.TXT"); Path p3 = Paths.get("C:\\Java_Dev\\..\\Java_Dev\\test1.txt"); boolean b1 = p1.equals(p2); System.out.println(b1); boolean b2 = p1.equals(p3); System.out.println(b2); } }
equals()方法在不解析實(shí)際文件引用的情況下以文本方式比較兩個(gè)路徑,并且不會(huì)測(cè)試文件系統(tǒng)中是否存在路徑。
Path接口實(shí)現(xiàn)java.lang.Comparable接口。我們可以使用它的compareTo()方法來與另一個(gè)Path對(duì)象進(jìn)行文本比較。
compareTo()方法返回一個(gè)int值。
上面的代碼生成以下結(jié)果。
以下代碼顯示如何使用compareTo()方法:
import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) throws Exception { Path p1 = Paths.get("C:\\Java_Dev\\test1.txt"); Path p2 = Paths.get("C:\\Java_Dev\\Test1.txt"); Path p3 = Paths.get("C:\\Java_Dev\\..\\Java_Dev\\test1.txt"); int v1 = p1.compareTo(p2); System.out.println(v1); int v2 = p1.compareTo(p3); System.out.println(v2); } }
我們可以使用endsWith()和startsWith()方法分別測(cè)試路徑是否以給定路徑結(jié)尾和開始。
上面的代碼生成以下結(jié)果。
以下代碼顯示了如何在路徑中使用endsWith()和startsWith()方法。
import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) throws Exception { Path p1 = Paths.get("C:\\Java_Dev\\test1.txt"); Path p2 = Paths.get("test1.txt"); Path p3 = Paths.get("Java_Dev\\test1.txt"); Path p4 = Paths.get(".txt"); // Using endsWith() boolean b1 = p1.endsWith(p2); System.out.println(b1); boolean b2 = p1.endsWith(p3); boolean b3 = p1.endsWith(p4); // Using startsWith() Path p5 = Paths.get("C:\\"); Path p6 = Paths.get("C:\\Java_Dev"); Path p7 = Paths.get("C:\\Java_Dev"); boolean b4 = p1.startsWith(p5); boolean b5 = p1.startsWith(p6); boolean b6 = p1.startsWith(p7); } }
上面的代碼生成以下結(jié)果。
以下代碼演示了isSameFile()方法的工作原理。它檢查如果兩個(gè)路徑將找到相同的文件。
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { // Assume that C:\Java_Dev\test1.txt file exists Path p1 = Paths.get("C:\\Java_Dev\\test1.txt"); Path p2 = Paths.get("C:\\Java_Dev\\..\\Java_Dev\\test1.txt"); // Assume that C:\abc.txt file does not exist Path p3 = Paths.get("C:\\abc.txt"); Path p4 = Paths.get("C:\\abc.txt"); try { boolean isSame = Files.isSameFile(p1, p2); System.out.println("p1 and p2 are the same: " + isSame); isSame = Files.isSameFile(p3, p4); System.out.println("p3 and p4 are the same: " + isSame); }catch (IOException e) { e.printStackTrace(); } } }
Path接口的normalize()方法在刪除點(diǎn)字符后返回一個(gè)Path。
此方法不訪問文件系統(tǒng)。
以下代碼顯示了在Windows上標(biāo)準(zhǔn)化路徑的一些示例。
import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) throws Exception { Path p1 = Paths.get("C:\\Java_Dev\\..\\\\Java_Dev\\test1.txt"); Path p1n = p1.normalize(); System.out.println(p1 + " normalized to " + p1n); Path p2 = Paths.get("C:\\Java_Dev\\test1.txt"); Path p2n = p2.normalize(); System.out.println(p2 + " normalized to " + p2n); Path p3 = Paths.get("\\..\\.\\test.txt"); Path p3n = p3.normalize(); System.out.println(p3 + " normalized to " + p3n); } }
上面的代碼生成以下結(jié)果。
我們可以使用Path接口的resolve(Path p)方法組合兩個(gè)路徑。
如果指定的路徑是絕對(duì)路徑,則返回指定的路徑。如果指定的路徑是空路徑,則返回路徑。
在其他情況下,它只是組合兩個(gè)路徑并返回結(jié)果,因此返回的路徑以指定的路徑結(jié)束。
以下代碼具有一些解析路徑的示例。
import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) throws Exception { Path p1 = Paths.get("C:\\Java_Dev"); Path p2 = Paths.get("test1.txt"); System.out.println(p1.resolve(p2)); Path p3 = Paths.get("C:\\test.txt"); System.out.println(p1.resolve(p3)); Path p4 = Paths.get(""); System.out.println(p1.resolve(p4)); Path p5 = Paths.get("Java_Dev\\Test"); Path p6 = Paths.get("test4.txt"); System.out.println(p5.resolve(p6)); } }
上面的代碼生成以下結(jié)果。
Path接口的relativize(Path p)方法獲得給定路徑相對(duì)于另一個(gè)路徑的相對(duì)路徑。
以下代碼有一些獲取相對(duì)路徑的示例。
import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) throws Exception { Path p1 = Paths.get("Java_Dev"); Path p2 = Paths.get("Java_Dev", "recent", "Test"); System.out.println(p1.relativize(p2)); System.out.println(p2.relativize(p1)); Path p3 = Paths.get("Abc"); Path p4 = Paths.get("Def"); System.out.println(p3.relativize(p4)); System.out.println(p4.relativize(p3)); } }
上面的代碼生成以下結(jié)果。
更多建議: