15.1 File类
File
类是java.io
包下代表与平台无关的文件和目录
,也就是说,如果希望在程序中操作文件和目录都可以通过File
类来完成。值得指出的是,不管是文件还是目录都是使用File
来操作的,File
能新建删除、重命名文件和目录,File
不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
15.1.1 访问文件和目录
File
类可以使用文件路径字符串来创建File
实例,该文件路径字符串既可以是绝对路径,也可以是相对路径。在默认情况下,系统总是依据用户的工作路径来解释相对路径,这个路径由系统属性”user.dir
“指定,通常也就是运行Java
虚拟机时所在的路径。
一旦创建了File
对象后,就可以调用File
对象的方法来访问,Fle
类提供了很多方法来操作文件和目录,下面列出一些比较常用的方法。
1.访问文件名相关的方法
方法 |
描述 |
String getName() |
返回此File 对象所表示的文件名或路径名(如果是路径,则返回最后一级子路径名). |
String getPath() |
返回次File 对象所对应的路径名. |
File getAbsoluteFile() |
返回此File 对象的绝对路径。 |
String getParent() |
返回此File 对象所对应目录(最后一级子目录)的父目录名。 |
boolean renameTo(File new Name) |
重命名此File 对象所对应的文件或目录,如果重命名成功,则返回true ;否则返回false . |
2.文件检测相关的方法
方法 |
描述 |
boolean exists() |
判断File 对象所对应的文件或目录是否存在。 |
boolean canWrite() |
判断File 对象所对应的文件和目录是否可写。 |
boolean canRead() |
判断File 对象所对应的文件和目录是否可读。 |
boolean isFile() |
判断File 对象所对应的是否是文件,而不是目录。 |
boolean isDirectory() |
判断File 对象所对应的是否是目录,而不是文件。 |
boolean isAbsolute() |
判断File 对象所对应的文件或目录是否是绝对路径。该方法消除了不同平台的差异,可以直接判断File 对象是否为绝对路径。在UNIX/Linux/BSD 等系统上,如果路径名开头是一条斜线(/ ),则表明该File 对象对应一个绝对路径;在 Windows 等系统上,如果路径开头是盘符,则说明它是一个绝对路径。 |
3.获取常规文件信息
方法 |
描述 |
long lastModified() |
返回文件的最后修改时间 |
long length() |
返回文件内容的长度。 |
## 4.文件操作相关的方法 ## |
|
方法 |
描述 |
boolean createNewFile() |
当此File 对象所对应的文件不存在时,该方法将新建一个该File 对象所指定的新文件,如果创建成功则返回true ;否则返回false . |
boolean delete() |
删除File 对象所对应的文件或路径。 |
static File createTempFile(String prefix,String suffix) |
在默认的临时文件目录中创建一个临时的空文件,使用给定前缀、系统生成的随机数和给定后缀作为文件名。这是一个静态方法,可以直接通过File 类来调用。 prefix 参数必须至少是3字节长。建议前缀使用一个短的、有意义的字符串,比如”hjb 或”mail" suffix 参数可以为null ,在这种情况下,将使用默认的后缀”.tmp “ |
static File createTempFile(String prefix,String suffix,File directory) |
在directory 所指定的目录中创建一个临时的空文件,使用给定前缀、系统生成的随机数和给定后缀作为文件名。这是一个静态方法,可以直接通过File 类来调用。 |
void deleteOnExit() |
注册一个删除钩子,指定当Java 虚拟机退出时,删除File 对象所对应的文件和目录。 |
## 5.目录操作相关的方法 ## |
|
方法 |
描述 |
boolean mkdir() |
试图创建一个File 对象所对应的目录,如果创建成功,则返回true ;否则返回false 。调用该方法时File 对象必须对应一个路径,而不是一个文件。 |
String[] list() |
列出File 对象的所有子文件名和路径名,返回String 数组。 |
File[] listFiles() |
列出File 对象的所有子文件和路径,返回File 数组。 |
static File[] listRoots() |
列出系统所有的根路径。这是一个静态方法,可以直接通过File 类来调用。 |
上面详细列出了File
类的常用方法,下面程序以几个简单方法来测试一下File
类的功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import java.io.*;
public class FileTest { public static void main(String[] args) throws IOException { File file = new File("."); System.out.println(file.getName()); System.out.println(file.getParent()); System.out.println(file.getAbsoluteFile()); System.out.println(file.getAbsoluteFile().getParent()); File tmpFile = File.createTempFile("aaa", ".txt", file); tmpFile.deleteOnExit(); File newFile = new File(System.currentTimeMillis() + ""); System.out.println("newFile对象是否存在:" + newFile.exists()); newFile.createNewFile(); newFile.mkdir(); String[] fileList = file.list(); System.out.println("====当前路径下所有文件和路径如下===="); for (String fileName : fileList) { System.out.println(fileName); } File[] roots = File.listRoots(); System.out.println("====系统所有根路径如下===="); for (File root : roots) { System.out.println(root); } } }
|
运行上面程序,效果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| . null G:\Desktop\随书源码\疯狂Java讲义第三版光盘\codes\15\15.1\. G:\Desktop\随书源码\疯狂Java讲义第三版光盘\codes\15\15.1 newFile对象是否存在:false ====当前路径下所有文件和路径如下==== 1562343471185 aaa2114436954429301658.txt FilenameFilterTest.class FilenameFilterTest.java FileTest.class FileTest.java ====系统所有根路径如下==== C:\ D:\ E:\ F:\ G:\ H:\
|
可以看到程序列出当前路径的所有文件和路径时,列出了程序创建的临时文件,但程序运行结束后,aaa.txt
临时文件并不存在,因为程序指定虚拟机退出时自动删除该文件。
注意
Windows
的路径分隔符使用反斜线(\
),而Java
程序中的反斜线表示转义字符,所以如果需要在Windows
的路径下包括反斜线,则应该使用两条反斜线,如F:\\abc\\test.txt
,或者直接使用斜线(/
)也可以,Java
程序支持将斜线当成平台无关的路径分隔符.
原文链接: 15.1 File类 15.1.1 访问文件和目录