首页 > 代码库 > 探究java IO之File类
探究java IO之File类
尽管java.io定义的大多数类用于操作流,但File类却不是。File类直接处理文件和文件系统。也就是说,File类没有指定如何从文件检索信息以及如何向文件中存储信息,而是描述了文件本身的属性。File对象用于获取和操作与磁盘文件关联的信息,例如权限,时间日期以及目录路径,并且还可以浏览子目录层次。
注意:由JDK7为NIO系统增加的Path接口和File类,在许多情况下都为File类提供了强大的替换方案,具体看后面的NIO章节。
下面的构造函数可以用于创建File对象:
File(String directoryPath) File(String directoryPath,String filename) File(File dirObj,String filename) File(URI uriObj)
其中,directoryPath是文件的路径名;filename是文件或子目录的名称; dirObj是指定目录的File对象;uriObj是描述文件的URI对象。
注意:Java使用介于UNIX和Windows约定之间的路径分隔符。如果在Windows版本的Java中使用正斜杠(/),那么路径仍然会被正确解析。请记住,如果使用Windows约定的反斜杠(\),那么在字符串中需要使用转义序列(\\)。
我们来看看File调用的示例:
package io; import java.io.File; public class FileDemo { public static void main(String[] args) { File f1 = new File("/home/fuhd/apache/apr-1.5.1.tar.gz"); //返回文件名 System.out.println("File name:" + f1.getName()); //返回文件路径 System.out.println("Path:" + f1.getPath()); //返回绝对路径 System.out.println("Abs Path:" + f1.getAbsolutePath()); //返回父目录路径 System.out.println("Parent:" + f1.getParent()); //是否存在 System.out.println(f1.exists() ? "exists" : "does not exist"); //是否有权限写 System.out.println(f1.canWrite() ? "is writeable" : "is not writeable"); //有否有权限读 System.out.println(f1.canRead() ? "is readable" : "is not readable"); //是否是文件 System.out.println(f1.isFile() ? "is normal file" : "might be a maned pipe"); //是否有绝对路径 System.out.println(f1.isAbsolute() ? "is absolute" : "is not absolute"); //文件最后修改时间 System.out.println("File last modified:" + f1.lastModified()); //文件大小 System.out.println("File size:" + f1.length() + " Bytes"); } }
File类还提供了两个有用的实用方法。第一个方法是renameTo(),如下所示:
boolean renameTo(File newName)
其中,由newName指定的文件名成为调用File对象的新名称。如果操作成功,就返回true,如果文件不能被重命令就返回false。第二个实用方法是delete(),该方法删除调用File对象的路径所代表的磁盘文件。该方法如下:
boolean delete()
如果目录为空的话,可以使用delete()方法删除这个目录。如果删除成功,delete()方法将返回true;如果不能删除文件,就返回false。
JDK7为File类新增了方法 toPath(),该方法如下所示:
Path toPath()
toPath()方法返回的Path对象表示由调用File对象封装的文件(换句话说,toPath()方法可以将File对象转换成Path对象)。Path是由JDK7新添加的接口。该接口被打包到java.nio.file包中,是NIO组成部分。因此,toPath()方法在旧的File类和新的Path接口之间搭建了一所桥梁。(当然,以前的方法都不是File类的全部,这里只是做了部分介绍而已)
目录
目录是包含一系列其他文件和目录的File对象。当为目录创建File对象时,isDirectory()方法将会返回true。在这种情况下,可以对File对象调用list()方法以提取内部的其他文件和目录列表。如例:
package io; import java.io.File; public class DirList { public static void main(String[] args) { String dir = "/home/fuhd/apache"; File file = new File(dir); if(file.isDirectory()){ String[] fileList = file.list(); if(fileList != null && fileList.length > 0){ for(String f1 : fileList){ System.out.println("文件名:" + f1); } } } } }
使用FilenameFilter接口
探究java IO之File类