簡體   English   中英

是否有一種干凈簡單的方法使Java OS中的文件路徑字符串不可知?

[英]Is there a clean and easy way to make file path strings in Java OS agnostic?

我創建了一個類,它接受任何一種格式的字符串(例如UNIX)並轉換為運行java的任何操作系統。

enum OperatingSystem {
    WINDOWS,
    LINUX;

    static OperatingSystem initOS() {
        String osName = System.getProperty("os.name");

        switch (osName) {
            case "Windows 8.1":
               return WINDOWS;
            case "Linux":
               return LINUX;
            default:
                return LINUX;
        }
    }

}



public class OSSP {
    public static final OperatingSystem USEROS = OperatingSystem.initOS();


//    Auxilarry methods to return OSAppropriateString
    private static String makeLinuxCompatible(String[] path) {
        return String.join("/", path);
    }

    private static String makeWindowsCompatible(String[] path) {
        return String.join("\\", path);
    }

    public static String getOSSpecificPath(String path) {
        String[] splittedPath = {""}, subpath = {""};
        String finalPath = "";
        if(path.contains("\\")) {
            splittedPath = path.split("\\\\",-1);
        }
        else if (path.contains("/")) {
            splittedPath = path.split("/",-1);
        }

        if (USEROS == OperatingSystem.LINUX) {
            finalPath =  makeLinuxCompatible(splittedPath);
        }
        else if (USEROS == OperatingSystem.WINDOWS) {
            finalPath =  makeWindowsCompatible(splittedPath);
        }
        return finalPath;
    }
}

如果你正在處理小代碼並且你必須經常這樣做,這很好。

但是,我有一個巨大的GUI代碼,我必須在程序中指定路徑的任何地方插入此函數。 有沒有辦法讓字符串自動特定於操作系統?

否則,任何采用路徑的OS功能在引擎蓋下自動更改的設置。

使用路徑文件

Path path = Paths.get(".../...");
Path path = Paths.get("...", "...");
// path.resolve, relativize, normalize, getFileSystem

此類是File的泛化,僅適用於純文件系統文件。 路徑可能使用zip文件系統指向.zip的子目錄,依此類推。

對於使用API​​建立的文件,可以使用Path.toFile()File.toPath()

Paths.get是非常通用的,也是由於Windows的Posix兼容性(接受/除了\\ )。 無論如何,您可以獲得規范的規范化路徑。

path.toRealPath()

您可以使用的舊File

String separator = File.separator;

對於可以指向不同文件系統的路徑:

String separator = path.getFileSystem().getSeparator();

通常, Path是一個存儲名稱部分,文件系統的漂亮類。 它涵蓋了許多方面,如".."

處理這種情況的最好方法是不要嘗試檢測操作系統,因為這可能是相當不錯的。 相反,Java API確實提供了一種方法來告訴您要用作路徑分隔符的字符。 請查看文件: https ://docs.oracle.com/javase/8/docs/api/java/io/File.html上的此API文檔,並查找特定的靜態字段separator 我強烈建議您使用File類解析路徑,然后如果您需要將路徑作為字符串,只需調用toURI().toString()將其轉換為操作系統可識別的格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM