黑马程序员技术交流社区
标题:
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类所对应的构造函数:
public File(String pathname) {
if (pathname == null) {
throw new NullPointerException();
}
this.path = fs.normalize(pathname);//①
this.prefixLength = fs.prefixLength(this.path);
}
复制代码
从①处代码可以看到java在接收String类型的pathname的时候,会根据本地文件系统对该pathname进行标准化(fs.normalize(path)),并返回标准的路径名。就是说不管你输入的是:C://test.txt、C:\\test.txt、C://test.txt,甚至是C:\\/////test.txt,java都能从该字符串中解析出正确的路径名,这是由不同系统所对应的normalize()方法所决定的。
我的文件系统是windows NTFS文件系统,有兴趣看下该文件系统所对应的normalize()方法:
public String normalize(String path) {
int n = path.length();
char slash = this.slash;
char altSlash = this.altSlash;
char prev = 0;
for (int i = 0; i < n; i++) {
char c = path.charAt(i);
if (c == altSlash)
return normalize(path, n, (prev == slash) ? i - 1 : i);
if ((c == slash) && (prev == slash) && (i > 1))
return normalize(path, n, i - 1);
if ((c == ':') && (i > 1))
return normalize(path, n, 0);
prev = c;
}
if (prev == slash) return normalize(path, n, n - 1);
return path;
}
复制代码
作者:
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