无论如何,无论程序当前运行的平台是什么,都会在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()是包私有的。

Win32FileSystem

public boolean isAbsolute(File f) 
{
        int pl = f.getPrefixLength();
        return (((pl == 2) && (f.getPath().charAt(0) == slash))
                || (pl == 3));
}

UnixFileSystem

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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top