额, 不得不说, 论坛是个好地方, 每隔几天总有很好的问题出现. 这篇博客还是因为一个有意思的帖子. 这次的问题和路径的表示方法有关. 帖子在这里: 《求java大神,关于se中的文件操作》
注: “完全相对路径”和”目录相对路径” 的英文分别为 “Completely relative”, “Directory-relative”, 限于本人英文水平, 翻译的可能有些问题, 还请大家指导
原问题
帖子地址: http://bbs.csdn.net/topics/391025871.
问题的大致意思是说: 当使用File(String pathname)去构造一个File对象是, 参数"e:"和"e:\\"有什么区别?
估计大多数人和我最开始的想法一样: 没区别. 然后下面就有位仁兄截了个图, 证明这两个是有区别的. 本着实事求是的精神, 我也测了测, 发现当java程序的当前路径在e盘时, "e:"和"e:\\"还真不一样…
源程序
为了方便说明问题, 这里的源程序跟帖子上稍微有点区别.
import java.io.*;
class Test
{
public static void main(String[] args)
{
digui(new File("e:"));
digui(new File("e:\\"));
}
public static void digui(File f)
{
System.out.println(f.getPath());
if( !f.exists() ){
System.out.println("not exist");
return;
}
File [] name = f.listFiles();
System.out.println(name.length);
for(int i = 0 ;i < name.length; i++)
{
System.out.println(name[i]);
}
}
}
将这个程序中的 "e:"和"e:\\"改成自己的工作盘符, 运行程序, 就会发现这两个路径的区别…
API文档上有关的说明
为了解释这个现象, 我首先查看了File类的文档, 看看有没有什么特殊说明. 只是发现了这样一句话
对于 Microsoft Windows 平台,包含盘符的路径名前缀由驱动器号和一个 “:” 组成。如果路径名是绝对路径名,还可能后跟 “\\”。
注意, 上面说如果是绝对路径名, 还可能跟"\\". 也就是说, 即使是以 驱动器号+”:” 开始的路径, 也不一定是绝对路径!
同时,经过测试, getPath方法得到的并不是完整的路径!仅仅是把我们传进去的参数标准化了而已.