我制作了一个类,它接受一种格式(例如 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 代码,我必须在程序中指定路径的任何地方插入此函数。有没有办法使像字符串这样的路径自动特定于操作系统?
否则,任何采用路径的操作系统功能都会在后台自动进行相应更改。
最佳答案
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/