2011-03-01 41 views
0

File类的JavaDoc:当File类与平台无关时,为什么File.isAbsolute()平台依赖于它?

文件和目录路径名的抽象表示。

用户界面和操作系统使用系统相关的路径名字符串来命名文件和目录。该课程提供了一个抽象的,系统无关的层级路径名称视图。

为什么方法.isAbsolute()平台相关? (在Win和Linux上返回/tmp的不同结果)并且不检查该文件是绝对的还是Linux或Windows? File类如何猜测我想通过代码中的File代表哪个平台的文件?我不一定代表本地文件系统的文件。

回答

2

它必须知道你对哪个平台感兴趣,而且当前的平台是一个很好的猜测!

在Linux上/tmp是绝对的。在Windows上它不是 - 它是相对于你当前的驱动器。

+0

/windows中的tmp是CURRENT_DRIVE_LETTER:\ tmp,不是吗?我认为这个绝对路径与c:\ tmp – 2011-03-01 13:00:41

+0

@Jan相同,尽管windows会搜索当前驱动器中的相对路径,但它仍然是一个相对路径。 – asgs 2011-03-01 13:04:18

+0

@Jan:Windows中的'/ tmp'可以引用多个不同的位置,这取决于当前目录是什么(例如'C:\ tmp'或'D:\ tmp')。我很确定这个事实使它成为相对路径。 – 2011-03-01 13:11:00

1

我不一定代表本地文件系统的文件

那么你不应该使用FileFile提供方便到本地文件系统,并不意味着代表非本地的资源。

还有其他与系统无关的类,如URIURL,您应该改用它(URL有一些设计缺陷,所以更喜欢URI)。

+1

javaDoc的状态:这个类提供了一个抽象的,系统无关的分层路径名称视图。 – 2011-03-01 13:07:27

+0

@Jan Zyka是的,然后讨论Windows和Unix系统中路径名称的表示方式是如何不同的。文件工作,只要你不混合系统,因为路径字符串是系统依赖(感谢像File.separator)。 – josefx 2011-03-01 14:10:09