Java:无论操作系统如何,如何确定路径是否绝对
-
06-07-2019 - |
题
无论如何,无论程序当前运行的平台是什么,都会在Java中查明给定路径是否是绝对路径。所以,我想要的可能类似于以下示例:
在Linux上:
new File("/home/").isAbsolute() // Should return true.
new File("C:/My Documents").isAbsolute() // Should *also* return true.
在Windows上:
new File("C:/Documents").isAbsolute() // Should return true.
new File("/home/").isAbsolute() // Should *also* return true.
我可以编写一些代码来解决这个问题,但我只是想知道是否有人知道用Java提供的内置类来解决这个问题。或者有没有人来过这个问题?你是怎么解决的?
谢谢!
解决方案
不。
有一些基础 FileSystem 类(即Java 7,但是它们之前也存在暴露isAbsolute(),但它们不公开 - 所以你不应该使用它们,即使你做了你的代码也会充满反射垃圾 - 并且只有“正确”的操作系统包含在JRE中,因此无论如何你都必须围绕它们进行编码。
以下是isAbsolute(...)的Java 7实现,以帮助您入门。请注意,File.getPrefixLength()是包私有的。
public boolean isAbsolute(File f)
{
int pl = f.getPrefixLength();
return (((pl == 2) && (f.getPath().charAt(0) == slash))
|| (pl == 3));
}
public boolean isAbsolute(File f)
{
return (f.getPrefixLength() != 0);
}
其他提示
在Java 7中:
new File(path).isAbsolute()
我使用Apache FilenameUtil进行破解 -
public static boolean isAbsolute(final String path) {
return FilenameUtils.getPrefixLength(path) != 0;
}
从技术上说,这是回归!相对。这对我的目的来说很好。
我最终使用了这个(在Java 6中):
private static boolean testPath(String path) {
int prefixLen = FilenameUtils.getPrefixLength(path);
if (testPathWin(path, prefixLen) || testPathLinux(prefixLen))
return true;
else
return false;
}
private static boolean testPathWin(String path, int prefixLen) {
if (prefixLen == 3)
return true;
File f = new File(path);
if ((prefixLen == 2) && (f.getPath().charAt(0) == '/'))
return true;
return false;
}
private static boolean testPathLinux(int prefixLen) {
return (prefixLen != 0);
}
不隶属于 StackOverflow