一、 Api 1.6.0说明
java.io
类 File
java.io.File
所有已实现的接口:
Serializable, Comparable<File>
public class File
extends Object
implements Serializable, Comparable<File>
文件和目录路径名的抽象表示形式。
用户界面和操作系统使用与系统相关的路径名字符串 来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。抽象路径名有两个组件:
1、一个可选的与系统有关的前缀 字符串,比如盘符,"/" 表示 UNIX 中的根目录,"\\\\" 表示 Microsoft Windows UNC 路径名。
2、零个或更多字符串名称 的序列。
抽象路径名中的第一个名称是目录名,对于 Microsoft Windows UNC 路径名则是主机名。抽象路径名中第一个名称之后的每个名称表示一个目录;最后一个名称既可以表示目录,也可以表示文件。空抽象路径名没有前缀和名称序列。
路径名字符串与抽象路径名之间的转换与系统有关。将抽象路径名转换为路径名字符串时,每个名称与下一个名称之间用一个默认分隔符 隔开。默认名称分隔符由系统属性file.separator 定义,可通过此类的公共静态字段 separator和 separatorChar使其可用。将路径名字符串转换为抽象路径名时,可以使用默认名称分隔符或者底层系统支持的任何其他名称分隔符来分隔其中的名称。
无论是抽象路径名还是路径名字符串,都可以是绝对 路径名或相对 路径名。绝对路径名是完整的路径名,不需要任何其他信息就可以定位它所表示的文件。相反,相对路径名必须使用取自其他路径名的信息进行解释。默认情况下,java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性 user.dir指定,通常是 Java 虚拟机的调用目录。
调用此类的 getParent()方法可以获取抽象路径名的父 路径名,它由路径名前缀以及路径名名称序列中的每个名称(最后一个除外)组成。对于任何具有绝对抽象路径名的File 对象,如果其绝对抽象路径名以某个目录的绝对路径名开头,那么该目录的绝对路径名是该 File 对象的祖先。例如,抽象路径名 "/usr" 表示的目录是路径名"/usr/local/bin" 所表示目录的一个祖先。
在处理 UNIX 平台的根目录,以及 MicrosoftWindows 平台的盘符、根目录和 UNC 路径名时,将用到前缀这一概念。如下所示:
1、对于 UNIX 平台,绝对路径名的前缀始终是"/"。相对路径名没有前缀。表示根目录的绝对路径名的前缀为 "/" 且名称序列为空。
2、对于 MicrosoftWindows 平台,包含盘符的路径名前缀由驱动器号和一个 ":" 组成。如果路径名是绝对路径名,还可能后跟"\\"。UNC 路径名的前缀是 "\\\\";主机名和共享名是名称序列中的前两个名称。没有指定驱动器的相对路径名没有前缀。
此类的实例可能表示(也可能不表示)实际文件系统对象,如文件或目录。如果它表示这种对象,那么该对象驻留在一个分区 中。分区是文件系统特定于操作系统的存储分区。一个存储设备(例如,物理磁盘驱动器、闪存、CD-ROM)可以包含多个分区。对象(如果有)将驻留在此路径名(绝对形式)某个祖先指定的分区上。
文件系统可以实现对实际文件系统对象上的某些操作(比如,读、写、执行)进行限制。这些限制统称为访问权限。文件系统可以对一个对象设置多个访问权限。例如,一个设置可能适用于对象的所有者,另一个设置则可能适用于所有其他用户。对象上的访问权限可能导致此类的某些方法执行失败。
File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。
从以下版本开始: JDK1.0
另请参见: 序列化表格
二、 Construct
File(File parent, String child) |
File(String parent, String child) |
public static void main(String[] args){
File f1=new File("e:\\fileTest\\1.txt");
System.out.println(f1);
File f2=new File("e:\\fileTest","1.txt");
System.out.println(f2);
File f3=new File("e:\\fileTest");
File f4=new File(f3,"1.txt");
System.out.println(f4);
}
三、 Method
(一) 创建新的文件
boolean | createNewFile() |
| 如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false。 |
public static boolean create() throws IOException{
File f1=new File("e:\\fileTest\\fileTest.txt");
return f1.createNewFile();
}
(二) 删除
boolean | delete() |
| 如果此路径名表示一个目录,则该目录必须为空才能删除。 当且仅当成功删除文件或目录时,返回 true;否则返回 false。 |
public static boolean delete() throws Exception{
File f1=new File("e:\\fileTest");
return f1.delete();
}
(三) 创建目录
boolean | mkdir() |
| 当且仅当已创建目录时,返回 true;否则返回 false。 |
public static booleancreateDir() throwsException{
File f1=new File("e:\\fileTest\\fileTest\\fileTest");
return f1.mkdir();
}
(四) 创建目录系列
boolean | mkdirs() |
| 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。 |
public static booleancreateDirs() throwsException{
File f1=new File("e:\\fileTest\\fileTest\\fileTest\\1.txt");
return f1.mkdirs();
}
注意:创建目录时,即便单个目录名为类似.txt等的文件后缀名的形式,实际上,创建的还是文件目录而不是文件。
(五) 重命名
boolean | |
| 此方法行为的许多方面都是与平台有关的:重命名操作无法将一个文件从一个文件系统移动到另一个文件系统,该操作不是不可分的,如果已经存在具有目标抽象路径名的文件,那么该操作可能无法获得成功。应该始终检查返回值,以确保重命名操作成功。 当且仅当重命名成功时,返回 true;否则返回 false。 |
public static boolean rename() throws Exception{
File f1=new File("e:\\fileTest\\fileTest.txt");
File f2=new File("e:\\fileTest\\fileTest2.jgp");
return f1.renameTo(f2);
}
(六) 判断文件或目录的相关属性
boolean | isAbsolute() |
boolean | isDirectory() |
boolean | isFile() |
boolean | isHidden() |
long | |
boolean | canExecute() |
boolean | canRead() |
boolean | canWrite() |
boolean | exists() |
System.out.println(f4.isAbsolute());
System.out.println(f4.isDirectory());
System.out.println(f4.isFile());
System.out.println(f4.isHidden());
System.out.println(f4.canExecute());
System.out.println(f4.canRead());
System.out.println(f4.canWrite());
System.out.println(f4.exists());
(七) File类的获取功能
getAbsoluteFile() | |
getAbsolutePath() | |
getCanonicalFile() | |
getCanonicalPath() | |
long | getFreeSpace() |
getName() | |
getParent() | |
getParentFile() | |
getPath() | |
long | getTotalSpace() |
long | getUsableSpace() |
long | lastModified() |
long | length() |
System.out.println(f4.getAbsoluteFile());
System.out.println(f4.getAbsolutePath());
System.out.println(f4.getCanonicalPath());
System.out.println(f4.getCanonicalFile());
System.out.println(f4.getFreeSpace());
System.out.println(f4.getName());
System.out.println(f4.getParent());
System.out.println(f4.getParentFile());
System.out.println(f4.getPath());
System.out.println(f4.getTotalSpace());
System.out.println(f4.getUsableSpace());
System.out.println(f4.lastModified());
System.out.println(f4.length());
(八) 获得直接的文件或文件夹
String[] | list() |
File[] | listFiles() |
public staticvoidgetFileList() throwsException{
File f1=new File("e:\\fileTest");
File[] fileList=f1.listFiles();
for(File file:fileList){
System.out.println(file);
}
}
public staticvoidgetStringList() throws Exception{
File f1=new File("e:\\fileTest");
String[] stringList=f1.list();
for(String str:stringList){
System.out.println(str);
}
}
(九) 综合案例
1. 查找单层含有指定内容的文件或目录
查找e:\fileTest目录下是否含有.txt结尾的文件。如果有,打印。
1) 直接设置条件查找
public staticvoidgetFile() throwsException{
File f1=new File("e:\\fileTest");
String strList[]=f1.list();
for(String str:strList){
File f2=new File(f1,str);
if(f2.isFile()&&f2.toString().endsWith(".txt")){
System.out.println(f2);
}
}
}
public staticvoidgetFile2() throwsException{
File f1=new File("e:\\fileTest");
File files[]=f1.listFiles();
for(File file:files){
if(file.isFile()&&file.toString().endsWith(".txt")){
System.out.println(file);
}
}
}
2) 使用文件名过滤器查找
String[] | list(FilenameFilter filter) |
public class MyFilenameFilter implements FilenameFilter{
public booleanaccept(File dir,String name){
File f1=new File(dir,name);
return f1.isFile()&&name.endsWith(".txt");
}
}
public staticvoidgetFileByFilter() throws Exception{
File f1=new File("e:\\fileTest");
String strList[]=f1.list(newMyFilenameFilter());
for(String str:strList){
File f2=new File(f1,str);
System.out.println(f2.getAbsolutePath());
}
}
File[] | listFiles(FileFilter filter) |
public class MyFileFilter implements FileFilter{
public booleanaccept(File pathname){
return pathname.isFile()&&pathname.toString().endsWith(".txt");
}
}
public staticvoidgetFile2ByFilter() throws Exception{
File f1=new File("e:\\fileTest");
File files[]=f1.listFiles(newMyFileFilter());
for(File file:files){
System.out.println(file);
}
}
2. 查找指定目录下所有层含有指定内容的文件或目录
查找e:\fileTest目录下所有含有.txt结尾的文件。如果有,打印。
public staticList<File> scanFile(List<File> fileExist,File file){
if(file==null){
throw new RuntimeException("目标文件夹为空");
}
if(!file.exists()){
throw new RuntimeException("目标文件夹不存在");
}
if(!file.isDirectory()){
throw new RuntimeException("目标文件夹不是文件夹");
}
File[] files=file.listFiles();
for(File f1:files){
if(f1.isDirectory()){
scanFile(fileExist,f1);
}else{
if(f1.toString().endsWith(".txt")){
System.out.println(f1);
fileExist.add(f1);
}
}
}
return fileExist;
}
测试
public staticvoidmain(String[] args)throwsException{
List<File> fileExist=null;
File testFile=new File("e:\\fileTest\\2.txt");
List<File> fileExistResult=scanFile(fileExist,testFile);
if(fileExistResult==null){
System.out.println("没有找到符合条件的文件");
}
System.out.println(fileExistResult);
}