我创建了一个类,该类可以采用一种格式(例如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功能都会在后台自动更改的设置。
答案 0 :(得分:4)
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 :(得分:1)
处理这种情况的最佳方法是不要尝试检测操作系统,因为这很可能是命中注定的。相反,Java API确实提供了一种告诉您什么字符用作路径分隔符的方法。请参阅文件https://docs.oracle.com/javase/8/docs/api/java/io/File.html上的该API文档,并查找特定的静态字段separator
。我强烈建议您使用File类来解析路径,然后,如果您需要将该路径作为字符串,只需调用toURI().toString()
使其成为操作系统可以识别的格式。