[Thinking in Java]

来源:互联网 发布:php执行exec权限不足 编辑:程序博客网 时间:2024/06/05 19:57

最近在系统地学习JavaIO流,首先学习的就是Java中的文件类。

File类主要函数总览:


这些函数都很简单,根据函数名就可以很好的掌握函数具体原理和用法。在这里我只讲解三个地方:

1. getPath()、getAbsolutePath()和getCanonicalPath()

String path = ".\\test.txt";String path1 = "E:\\test.txt";File file = new File(path);File file2 = new File(path1);System.out.println(file.getPath());System.out.println(file.getAbsolutePath());System.out.println(file.getCanonicalPath());System.out.println("<------------->");System.out.println(file2.getPath());System.out.println(file2.getAbsolutePath());System.out.println(file2.getCanonicalPath());
运行结果:


可以发现:

使用了绝对路径的所有函数三种方法的结果均是该文件的绝对路径。

使用了相对路径的三种函数结果不同,分别为:

getPath():相对路径本身

getAbsolutePath():定义文件时路径对应的绝对路径,但是没有处理"."或".."的情况

getCanonicalPath():规范的绝对路径,会处理"."或".."的情况


2. File中的Separator,SeparatorChar,pathSeparator和pathSeparatorChar

总的来说,Separator是用来分隔一个路径字符串中的不同目录的。pathSeparator用来分隔连续多个路径字符串。

例如:"E:\mydir1\mydir2\test.txt";在这个字符串中,"\"就是Separator

例如:"E:\mydir1\mydir2\test.txt;G\mydir3\test2.txt",其中,";"就是E:\mydir1\mydir2\test.txt和G\mydir3\test2.txt的pathSeparator。

Separator和SeparatorChar:

public static final char separatorChar = fs.getSeparator();

public static final String separator = "" + separatorChar; 

可以看出,Separator是由SeparatorChar和一个空字符串相加组成一个字符串。在Unix中,SeparatorChar是'/',在Windows中,SeparatorChar是'\'

pathSeparator和pathSeparatorChar:

public static final char pathSeparatorChar = fs.getPathSeparator();

public static final String pathSeparator = "" + pathSeparatorChar;

可以看出,pathSeparator 是由pathSeparatorChar和一个空字符串相加组成一个字符串。在Unix中,pathSeparator 是':',pathSeparatorChar是';'

同时,我们在文件的创建中经常出现下面这种情况;

String path = "E:\\test.txt";File file = new File(path);

那么"\\"是什么呢?"\\"并不是一个文件路径中目录的分隔符,只是在字符串中,所有的'\'均表示转义,意为下一个字符表示特殊含义。所以我们需要使用"\"的时候,需要变为"\\"进行转义。"\\"本身并没有任何意思。表示转义的'\'并不真正的出现在字符串中。

例如:


结果:


我们还可通过一下形式来定义路径:

String path= "E:" + File.separator + "test123.txt";

3. file.mkdir()和file.mkdirs()

String path = "E:\\123\\456";File dir = new File(path);dir.mkdir();//如果123文件夹不存在则无法创建456dir.mkdirs();//如果123文件夹不存在也可以创建456