在此示例中,我們將學(xué)習(xí)使用String方法,URI類和java.nio.file包從Java中的兩個絕對路徑獲取相對路徑。
import java.io.File; import java.net.URI; class Main { public static void main(String[] args) { try { //兩個絕對路徑 File absolutePath1 = new File("C:\\Users\\Desktop\\nhooo\\Java\\Time.java"); System.out.println("絕對路徑1: " + absolutePath1); File absolutePath2 = new File("C:\\Users\\Desktop"); System.out.println("絕對路徑2: " + absolutePath2); //將絕對路徑轉(zhuǎn)換為URI URI path1 = absolutePath1.toURI(); URI path2 = absolutePath2.toURI(); //從兩個路徑創(chuàng)建相對路徑 URI relativePath = path2.relativize(path1); //將URI轉(zhuǎn)換為字符串 String path = relativePath.getPath(); System.out.println("相對路徑: " + path); } catch (Exception e) { e.getStackTrace(); } } }
輸出結(jié)果
絕對路徑1: C:\Users\Desktop\nhooo\Java\Time.java 絕對路徑2: C:\Users\Desktop 相對路徑: nhooo/Java/Time.java
在上面的示例中,我們有兩個名為 absolutePath1 和 absolutePath2 的絕對路徑。我們已經(jīng)使用URI類將絕對路徑轉(zhuǎn)換為相對路徑。
toURI() - 將File對象轉(zhuǎn)換為Uri
relativize() - 通過將兩個絕對路徑相互比較來提取相對路徑
getPath() - 將URI轉(zhuǎn)換為字符串
import java.io.File; class Main { public static void main(String[] args) { //創(chuàng)建文件對象 File file1 = new File("C:\\Users\\Desktop\\nhooo\\Java\\Time.java"); File file2 = new File("C:\\Users\\Desktop"); // 將文件對象轉(zhuǎn)換為字符串 String absolutePath1 = file1.toString(); System.out.println("絕對路徑1: " + absolutePath1); String absolutePath2 = file2.toString(); System.out.println("絕對路徑2: " + absolutePath2); //獲取相對路徑 String relativePath = absolutePath1.substring(absolutePath2.length()); System.out.println("絕對路徑: " + relativePath); } }
輸出結(jié)果
絕對路徑1: C:\Users\Desktop\nhooo\Java\Time.java 絕對路徑2: C:\Users\Desktop 絕對路徑: \nhooo\Java\Time.java
在上面的示例中,我們將文件路徑轉(zhuǎn)換為字符串。注意表達(dá)式
absolutePath1.substring(absolutePath2.length())
這里,substring ()方法返回 absolutePath1的一部分,從索引等于 absolutePath2的長度開始。也就是說,從 absolutePath1中刪除 absolutePath2 表示的字符串。
要了解有關(guān)子字符串如何工作的更多信息,請訪問Java String substring()。
import java.nio.file.Path; import java.nio.file.Paths; class Main { public static void main(String[] args) { //創(chuàng)建文件對象 Path absolutePath1 = Paths.get("C:\\Users\\Desktop\\nhooo\\Java\\Time.java"); Path absolutePath2 = Paths.get("C:\\Users\\Desktop"); //將絕對路徑轉(zhuǎn)換為相對路徑 Path relativePath = absolutePath2.relativize(absolutePath1); System.out.println("相對路徑: " + relativePath); } }
輸出結(jié)果
相對路徑: nhooo\Java\Time.java
在上面的示例中,我們使用了Path接口的relativize()方法從兩個絕對路徑獲取相對路徑。