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。結論

在這篇簡短的文章中,我們學習瞭如何使用特定於系統的文件分隔符構造路徑,以便我們的代碼可以在多個操作系統上工作。

我們看到瞭如何使用內置類PathFile來構造文件路徑,並且看到瞭如何獲取必要的分隔符以與String串聯實用程序一起使用。

與往常一樣,示例代碼可在GitHub上找到