不同的操作系統(tǒng)使用不同的字符作為文件和路徑分隔符。當(dāng)我們的應(yīng)用程序需要在多個(gè)平臺(tái)上運(yùn)行時(shí),我們需要正確處理這些問(wèn)題。
Java幫助我們選擇一個(gè)合適的分隔符,并提供了一些函數(shù)來(lái)幫助我們創(chuàng)建能在主機(jī)操作系統(tǒng)上運(yùn)行的路徑。
在本文中,我們將了解如何編寫(xiě)代碼來(lái)使用正確的文件和路徑分隔符。
2.文件分隔符
文件分隔符是用來(lái)分隔構(gòu)成特定位置路徑的目錄名的字符。
1.獲取文件分隔符
在Java中,有幾種方法可以獲得文件分隔符。
我們可以用File.separator來(lái)獲取String的分隔符。
String fileSeparator = File.separator;
我們也可以用File.separatorChar獲得這個(gè)分隔符的字符。
char fileSeparatorChar = File.separatorChar;
從Java 7開(kāi)始,我們也可以使用 文件系統(tǒng) 。
String fileSeparator = FileSystems.getDefault().getSeparator();
輸出結(jié)果將取決于主機(jī)操作系統(tǒng)。文件分隔符在Windows上為,在macOS和基于Unix的操作系統(tǒng)上為/
。
2.構(gòu)造一個(gè)文件路徑
Java提供了一些方法來(lái)從目錄列表中構(gòu)建文件路徑。
這里,我們使用Paths類(lèi)。
Path path = Paths.get("dir1", "dir2");
讓我們?cè)贛icrosoft Windows上測(cè)試一下。
assertEquals("dir1dir2", path.toString());
同樣,我們也可以在Linux或Mac上測(cè)試它。
assertEquals("dir1/dir2", path.toString());
我們也可以使用文件類(lèi)。
File file = new File("file1", "file2");
讓我們?cè)贛icrosoft Windows上測(cè)試一下。
assertEquals("file1ile2", file.toString());
同樣,我們也可以在Linux或Mac上測(cè)試它。
assertEquals("file1/file2", file.toString());
正如我們所看到的,我們可以只提供路徑字符串來(lái)構(gòu)建一個(gè)文件路徑---我們不需要明確地包括一個(gè)文件分隔符。
3.路徑分隔符
路徑分隔符是操作系統(tǒng)常用的一個(gè)字符,用于分隔路徑列表中的各個(gè)路徑。
3.1.獲取路徑分隔符
我們可以用File.pathSeparator來(lái)獲取路徑分隔符的 String 。
String pathSeparator = File.pathSeparator;
我們也可以以char的形式獲得路徑分隔符。
char pathSeparatorChar = File.pathSeparatorChar;
這兩個(gè)例子都返回了路徑分隔符。在Windows上是分號(hào);
,在Mac和基于Unix的操作系統(tǒng)上是冒號(hào):
。
3.2.構(gòu)造一個(gè)文件路徑
我們可以用分隔符作為分隔符來(lái)構(gòu)建一個(gè)String的文件路徑。
讓我們?cè)囋?em>String.join方法:
String[] pathNames = { "path1", "path2", "path3" };
String path = String.join(File.pathSeparator, pathNames);
這里我們?cè)赪indows上測(cè)試我們的代碼。
assertEquals("path1;path2;path3", path);
而文件路徑在Linux或Mac上看起來(lái)會(huì)有所不同。
assertEquals("path1:path2:path3", path);
類(lèi)似地,我們可以使用StringJoiner類(lèi):
public static StringJoiner buildPathUsingStringJoiner(String path1, String path2) {
StringJoiner joiner = new StringJoiner(File.pathSeparator);
joiner.add(path1);
joiner.add(path2);
return joiner;
}
讓我們?cè)贛icrosoft Windows上測(cè)試我們的代碼。
assertEquals("path1;path2", buildPathUsingStringJoiner("path1", "path2"));
而且它在Mac或Unix上的表現(xiàn)會(huì)有所不同。
assertEquals("path1:path2", buildPathUsingStringJoiner("path1", "path2"));
總結(jié)
在這篇短文中,我們學(xué)習(xí)了如何使用系統(tǒng)特定的文件分隔符來(lái)構(gòu)建路徑,這樣我們的代碼就可以在多個(gè)操作系統(tǒng)上工作。
我們看到了如何使用內(nèi)置類(lèi)Path和File來(lái)構(gòu)造文件路徑,我們還看到了如何獲得必要的分隔符來(lái)使用String連接工具。
-
文件
+關(guān)注
關(guān)注
1文章
561瀏覽量
24671 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62323 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68229 -
應(yīng)用程序
+關(guān)注
關(guān)注
37文章
3237瀏覽量
57547
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論