我做了一个类,它发生在一个格式的任何字符串(如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;
对于能够指向不同file systems的路径:
String separator = path.getFileSystem().getSeparator();
一般路径是一个极好的存储类的名称部分,文件系统。它涵盖了很多方面,例如".."
。
对付这种情况,最好的办法是不要尝试检测OS,因为这可以是相当冒险的。相反,Java API中确实提供了一种方式来告诉你什么字符作为路径分隔符来使用。只看文件此API文档:https://docs.oracle.com/javase/8/docs/api/java/io/File.html并查找特定的静态字段separator
。我会强烈建议您使用解析File类路径中,那么,如果你需要的路径作为一个字符串只需拨打toURI().toString()
得到它进入该操作系统可以识别的格式。