黑马程序员技术交流社区

标题: JAVA文件路径书写问题 [打印本页]

作者: 紫幻随影-缪    时间: 2014-5-12 09:23
标题: JAVA文件路径书写问题
本帖最后由 紫幻随影-缪 于 2014-5-12 16:46 编辑

File file = New File(C://test.txt")、File file = New File("C:\\test.txt")、File file = New File("C:/test.txt")都可以达到目的,但是这三种写法有没有什么差别呢?

作者: jieyu90    时间: 2014-5-12 10:33
先贴File类所对应的构造函数:
  1.     public File(String pathname) {
  2.         if (pathname == null) {
  3.             throw new NullPointerException();
  4.         }
  5.         this.path = fs.normalize(pathname);//①
  6.         this.prefixLength = fs.prefixLength(this.path);
  7.     }
复制代码

从①处代码可以看到java在接收String类型的pathname的时候,会根据本地文件系统对该pathname进行标准化(fs.normalize(path)),并返回标准的路径名。就是说不管你输入的是:C://test.txt、C:\\test.txt、C://test.txt,甚至是C:\\/////test.txt,java都能从该字符串中解析出正确的路径名,这是由不同系统所对应的normalize()方法所决定的。

我的文件系统是windows NTFS文件系统,有兴趣看下该文件系统所对应的normalize()方法:
  1. public String normalize(String path) {
  2.         int n = path.length();
  3.         char slash = this.slash;
  4.         char altSlash = this.altSlash;
  5.         char prev = 0;
  6.         for (int i = 0; i < n; i++) {
  7.             char c = path.charAt(i);
  8.             if (c == altSlash)
  9.                 return normalize(path, n, (prev == slash) ? i - 1 : i);
  10.             if ((c == slash) && (prev == slash) && (i > 1))
  11.                 return normalize(path, n, i - 1);
  12.             if ((c == ':') && (i > 1))
  13.                 return normalize(path, n, 0);
  14.             prev = c;
  15.         }
  16.         if (prev == slash) return normalize(path, n, n - 1);
  17.         return path;
  18.     }
复制代码

作者: 247033993@qq.co    时间: 2014-5-12 10:41
一般认为"/"的作用等同于"\\"
在java中路径一般用"/"
windows中的路径一般用"\"
linux、unix中的路径一般用"/"
所以在java中写windows路径一般用"/"或将"\"转义一下,就成了"\\"
不过为了跨平台性,我建议在java中路径分隔符,不要使用这些,直接使用File.separator。
作者: 神马    时间: 2014-5-12 16:36
楼上的回答都好好啊,学习了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2