是否有一个干净和简单的方式让在Java中OS文件路径字符串无关?

问题描述 投票:3回答:2

我做了一个类,它发生在一个格式的任何字符串(如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功能相应地自动引擎盖下变化。

java string filepath
2个回答
4
投票

使用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();

一般路径是一个极好的存储类的名称部分,文件系统。它涵盖了很多方面,例如".."


1
投票

对付这种情况,最好的办法是不要尝试检测OS,因为这可以是相当冒险的。相反,Java API中确实提供了一种方式来告诉你什么字符作为路径分隔符来使用。只看文件此API文档:https://docs.oracle.com/javase/8/docs/api/java/io/File.html并查找特定的静态字段separator。我会强烈建议您使用解析File类路径中,那么,如果你需要的路径作为一个字符串只需拨打toURI().toString()得到它进入该操作系统可以识别的格式。

© www.soinside.com 2019 - 2024. All rights reserved.