繁体   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