Java:无论操作系统如何,如何确定路径是否绝对

His*_*His 17 java path absolute-path

无论如何,在Java中,无论程序当前运行的平台是什么,都要确定给定路径是否是绝对路径.所以,我想要的可能是以下示例:

在Linux上:

new File("/home/").isAbsolute() // Should return true.
new File("C:/My Documents").isAbsolute() // Should *also* return true.
Run Code Online (Sandbox Code Playgroud)

在Windows上:

new File("C:/Documents").isAbsolute() // Should return true.
new File("/home/").isAbsolute() // Should *also* return true.
Run Code Online (Sandbox Code Playgroud)

我可以编写一些代码来解决这个问题,但我只是想知道是否有人知道用Java提供的内置类来解决这个问题.或者有没有人来过这个问题?你是怎么解决的?

谢谢!

Kev*_*ose 10

不.

有一些底层的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));
}
Run Code Online (Sandbox Code Playgroud)

UnixFileSystem:

public boolean isAbsolute(File f) 
{
        return (f.getPrefixLength() != 0);
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,六年后,这个答案已经过时了.如今,File类包含一个"[isAbsolute()](http://docs.oracle.com/javase/7/docs/api/java/io/File.html#isAbsolute)"方法,它完全符合您的要求d expect:_"测试这个抽象路径名是否是绝对的.绝对路径名的定义是系统相关的.在UNIX系统上,如果路径名的前缀为"/",则路径名是绝对的.在Microsoft Windows系统上,路径名是绝对的,如果它的前缀是一个驱动器说明符后跟"\\",或者它的前缀是"\\\\"_ (10认同)

Val*_*ant 8

在Java 7中:

new File(path).isAbsolute()
Run Code Online (Sandbox Code Playgroud)