java - 有没有一种干净简单的方法可以使 Java OS 中的文件路径字符串不可知?

标签 java string filepath

我制作了一个类,它接受一种格式(例如 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 代码,我必须在程序中指定路径的任何地方插入此函数。有没有办法使像字符串这样的路径自动特定于操作系统?

否则,任何采用路径的操作系统功能都会在后台自动进行相应更改。

最佳答案

使用PathFiles .

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;

对于可以指向不同file systems的路径:

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

一般来说,Path 是一个漂亮的类,用于存储名称部分,即文件系统。 它涵盖了许多方面,例如 "..".

关于java - 有没有一种干净简单的方法可以使 Java OS 中的文件路径字符串不可知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54588935/

相关文章:

java - 为什么在这种特殊情况下向 JList 添加元素会使其为空?

数据库模式更改的 Java 等效项,例如 Django 的 South?

python - 从Python 3移至Python 2

Python 路径 - 处理主目录和相对目录

bash - 如何将多个文件通过管道传输到 ffmpeg?

java - HTMLUnit 不点击按钮

java - 如何指定一次使用哪个模式?

swift - 如何从数据中读取以 null 结尾的字符串?

java - 简单的数学表达式解析

java - MySQL SQL脚本中没有这样的文件或目录