是否有一种干净简单的方法来使 Java OS 中的文件路径字符串不可知?
Is there a clean and easy way to make file path strings in Java OS agnostic?
我制作了一个 class,它接受任何一种格式的字符串(例如 UNIX)并转换为任何 OS 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 具体?
否则,任何采用路径的 OS 函数的设置都会在后台自动更改。
处理这种情况的最佳方法是不要尝试检测 OS,因为这可能是碰碰运气。相反,Java API 确实提供了一种方法来告诉您使用什么字符作为路径分隔符。查看有关文件的 API 文档:https://docs.oracle.com/javase/8/docs/api/java/io/File.html 并查找特定的静态字段 separator
。我强烈建议您使用文件 class 解析路径,然后如果您需要将路径作为字符串,只需调用 toURI().toString()
即可将其转换为 OS 可以识别的格式。
Path path = Paths.get(".../...");
Path path = Paths.get("...", "...");
// path.resolve, relativize, normalize, getFileSystem
此class 是File
的概括,仅适用于纯文件系统文件。
路径可能指向使用 zip 文件系统等的 .zip 的子目录。
对于使用 API 建立的文件,可以使用 Path.toFile()
和 File.toPath()
。
Paths.get
非常通用,这也是由于 Posix 与 Windows 的兼容性(除了 \
之外还接受 /
)。无论如何,您可以获得规范的规范化路径。
path.toRealPath()
旧的File
你可以使用:
String separator = File.separator;
对于可以指向不同的路径 file systems:
String separator = path.getFileSystem().getSeparator();
一般来说 Path 是一个漂亮的 class 存储名称部分,文件系统。
它涵盖了很多方面,例如 ".."
.
我制作了一个 class,它接受任何一种格式的字符串(例如 UNIX)并转换为任何 OS 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 具体?
否则,任何采用路径的 OS 函数的设置都会在后台自动更改。
处理这种情况的最佳方法是不要尝试检测 OS,因为这可能是碰碰运气。相反,Java API 确实提供了一种方法来告诉您使用什么字符作为路径分隔符。查看有关文件的 API 文档:https://docs.oracle.com/javase/8/docs/api/java/io/File.html 并查找特定的静态字段 separator
。我强烈建议您使用文件 class 解析路径,然后如果您需要将路径作为字符串,只需调用 toURI().toString()
即可将其转换为 OS 可以识别的格式。
Path path = Paths.get(".../...");
Path path = Paths.get("...", "...");
// path.resolve, relativize, normalize, getFileSystem
此class 是File
的概括,仅适用于纯文件系统文件。
路径可能指向使用 zip 文件系统等的 .zip 的子目录。
对于使用 API 建立的文件,可以使用 Path.toFile()
和 File.toPath()
。
Paths.get
非常通用,这也是由于 Posix 与 Windows 的兼容性(除了 \
之外还接受 /
)。无论如何,您可以获得规范的规范化路径。
path.toRealPath()
旧的File
你可以使用:
String separator = File.separator;
对于可以指向不同的路径 file systems:
String separator = path.getFileSystem().getSeparator();
一般来说 Path 是一个漂亮的 class 存储名称部分,文件系统。
它涵盖了很多方面,例如 ".."
.