【发布时间】:2019-07-02 11:46:16
【问题描述】:
我已经创建了一个类,它接受一种格式的任何字符串(例如 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 代码,我必须在程序中指定路径的任何地方插入这个函数。有没有办法让像字符串这样的路径自动特定于操作系统?
否则,任何采用路径的操作系统功能都会在后台自动相应更改。
【问题讨论】:
-
只使用 File.separator
-
仅供参考,macOS 上默认使用的文件系统使用冒号作为路径分隔符,而不是斜杠。方便的是,Mac 的 JVM 会自动转换带有正斜杠 SOLIDUS 分隔符的 Unix 样式路径,就好像它们是冒号字符一样。不知道其他平台上的JVM实现有没有类似的。
-
我能想到的最简洁的方法是从
java.io.File切换到java.nio.file.Path。它已经拥有与您创建的 API 大致相同的 API,但由 JDK 作者而不是您支持,从而减轻了您自己测试所有内容的负担。 -
@JEY,更好的是,上面的所有代码都可以替换为
Paths.get("/", path),我很确定。他正在使用 Java 8,没有真正的理由继续使用File。