A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 紫幻随影-缪 中级黑马   /  2014-5-12 09:23  /  1106 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 紫幻随影-缪 于 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")都可以达到目的,但是这三种写法有没有什么差别呢?

3 个回复

倒序浏览
先贴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.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
一般认为"/"的作用等同于"\\"
在java中路径一般用"/"
windows中的路径一般用"\"
linux、unix中的路径一般用"/"
所以在java中写windows路径一般用"/"或将"\"转义一下,就成了"\\"
不过为了跨平台性,我建议在java中路径分隔符,不要使用这些,直接使用File.separator。
回复 使用道具 举报
楼上的回答都好好啊,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马