Java文件分隔符與文件路徑分隔符
1.概述
不同的操作系統使用不同的字符作為文件和路徑分隔符。當我們的應用程序必須在多個平台上運行時,我們需要正確處理它們。
Java幫助我們選擇合適的分隔符,並提供函數來幫助我們創建可在主機操作系統上運行的路徑。
在這個簡短的教程中,我們將了解如何編寫代碼以使用正確的文件和路徑分隔符。
2.文件分隔符File Separator
文件分隔符是用於分隔組成到特定位置路徑的目錄名稱的字符。
2.1。獲取文件分隔符File Separator
有幾種方法可以獲取Java中的文件分隔符。
我們可以使用File.separator
將分隔符作為String
File.separator
:
String fileSeparator = File.separator;
我們也可以使用File.separatorChar
將此分隔符作為char
File.separatorChar
:
char fileSeparatorChar = File.separatorChar;
從Java 7開始,我們還可以使用FileSystems
:
String fileSeparator = FileSystems.getDefault().getSeparator();
輸出將取決於主機操作系統。在Windows和/
macOS和基於Unix的操作系統上,文件分隔符為\
。
2.2。構造文件路徑File Path
Java提供了幾種從其目錄列表構造文件路徑的方法。
在這裡,我們使用Paths
類:
Path path = Paths.get("dir1", "dir2");
讓我們在Microsoft Windows上對其進行測試:
assertEquals("dir1\\dir2", path.toString());
同樣,我們可以在Linux或Mac上對其進行測試:
assertEquals("dir1/dir2", path.toString());
我們還可以使用File
類:
File file = new File("file1", "file2");
讓我們在Microsoft Windows上對其進行測試:
assertEquals("file1\\file2", file.toString());
同樣,我們可以在Linux或Mac上對其進行測試:
assertEquals("file1/file2", file.toString());
如我們所見,我們僅提供路徑字符串即可構建文件路徑-我們不需要顯式包括文件分隔符。
3. 路徑分隔符Path Separator
路徑分隔符是操作系統通常用來分隔路徑列表中各個路徑的字符。
3.1。獲取路徑分隔符pathSeparator
我們可以使用File.pathSeparator
將路徑分隔符作為String
File.pathSeparator
:
String pathSeparator = File.pathSeparator;
我們還可以將路徑分隔符作為char
:
char pathSeparatorChar = File.pathSeparatorChar;
這兩個示例都返迴路徑分隔符。在Windows上是分號(; )
在基於Mac和Unix的操作系統上是冒號(:)。
3.2 構造文件路徑
我們可以使用分隔符作為分隔符,將文件路徑構造為String
。
讓我們嘗試一下String.join
方法:
String[] pathNames = { "path1", "path2", "path3" };
String path = String.join(File.pathSeparator, pathNames);
在這裡,我們在Windows上測試代碼:
assertEquals("path1;path2;path3", path);
並且文件路徑在Linux或Mac上看起來會有所不同:
assertEquals("path1:path2:path3", path);
同樣,我們可以使用StringJoiner
類:
public static StringJoiner buildPathUsingStringJoiner(String path1, String path2) {
StringJoiner joiner = new StringJoiner(File.pathSeparator);
joiner.add(path1);
joiner.add(path2);
return joiner;
}
讓我們在Microsoft Windows上測試我們的代碼:
assertEquals("path1;path2", buildPathUsingStringJoiner("path1", "path2"));
在Mac或Unix上,其行為將有所不同:
assertEquals("path1:path2", buildPathUsingStringJoiner("path1", "path2"));
4。結論
在這篇簡短的文章中,我們學習瞭如何使用特定於系統的文件分隔符構造路徑,以便我們的代碼可以在多個操作系統上工作。
我們看到瞭如何使用內置類Path
和File
來構造文件路徑,並且看到瞭如何獲取必要的分隔符以與String
串聯實用程序一起使用。
與往常一樣,示例代碼可在GitHub上找到。