一个File类的对象,表示了磁盘上的文件或目录
File类提供了与平台无关的方法来对磁盘上的文件或目录进行操作。
File类直接处理文件和文件系统。
File类没有指定信息怎样从文件读取或向文件存储。
1.创建一个文件或目录
构造方法:
File(String directoryPath)
File(String directoryPath, String filename)
File(File dirObj, String filename)
这里,directoryPath是文件的路径名,filename 是文件名,dirObj 是一个指定目录的File 对象
1 package File; 2 3 import java.io.File; 4 import java.io.IOException; 5 6 public class File1 { 7 8 public static void main(String[] args) throws IOException 9 { 10 File file=new File("c:\abc.txt"); 11 12 file.createNewFile();//创建文件,该路径的目录全部必须存在 13 14 File file2=new File("c:\abc\c"); 15 16 file2.mkdirs();//创建目录,该路径的上一级目录可以不存在 17 18 //separator(根)表示路径分隔符,即为\或者/ 19 //创建文件在对应class盘符下 20 File file3 = new File(File.separator); 21 22 File file4 = new File(file, "test.txt"); 23 24 System.out.println(file4.createNewFile()); 25 } 26 }
File f = new File("c:\java.txt");// 这一句代码在LINUX系统下是不能使用的,因为Linux并没有盘符的概念。
这一句代码中,使用了“\”。在java中“”被作为转义字符。第一根反斜杠成功将第二根反斜杠转义。
这样做比较好:
File f = new File("c:/java.txt");
2.File类中的常用方法
String getName()//返回文件名
String getPath()
String getAbsolutePath()//获取文件的绝对路径
String getParent()//获取文件的父目录
boolean renameTo( File newName)//重新命名
long length()//获取文件长度
boolean delete()//删除文件
boolean mkdir()//创建目录
String[] list()//返回抽象路径名表示路径中的文件名和目录名。
boolean exists()//判断文件存在
boolean canWrite()//是否可以写
boolean canRead()//是否可以读
boolean isFile()//是否为文件
boolean isDirectory()//是否为,目录
3.使用FilenameFilter
希望能够限制由list()方法返回的文件数目,使它仅返回那些与一定的文件名方式或者过滤(filter)相匹配的文件。为达到这样的目的,必须使用list()的第二种形式(方法重载)String[ ] list(FilenameFilterFFObj)。该形式中,FFObj是一个实现FilenameFilter接口的类的对象。
FilenameFilter仅定义了一个方法,accept()。该方法被列表中的每个文件调用一次。
它的通常形式如下:
boolean accept(File directory, String filename)
当被directory 指定的目录中的文件(也就是说,那些与filename 参数匹配的文件)包含在列表中时,accept()方法返回true ,当这些文件没有包括在列表中时,accept()返回false。
1 import java.io.File; 2 import java.io.FilenameFilter; 3 4 public class FileTest7 5 { 6 public static void main(String[] args) 7 { 8 File file = new File("C:\abc\xyz\hello"); 9 10 //策略模式 11 String[] names = file.list(new FilenameFilter() 12 { 13 //第一个参数表示待测试文件对应的目录,第二个参数代表测试文件本身 14 public boolean accept(File dir, String name) 15 { 16 if(name.endsWith(".txt")) 17 { 18 return true; 19 } 20 21 return false; 22 }; 23 }); 24 25 for(String name : names) 26 { 27 System.out.println(name); 28 }
4.listFiles()方法
File[ ] listFiles()
File[ ] listFiles(FilenameFilterFFObj)
File[ ] listFiles(FileFilterFObj)
上述三种形式以File对象数组的形式返回文件列表,而不是用字符串形式返回。第一种形式返回所有的文件,第二种形式返回满足指定FilenameFilter接口的文件。除了返回一个File 对
象数组,这两个listFiles()方法就像list()方法一样工作。
第三种listFiles()形式返回满足指定FileFilter的路径名的文件。FileFilter只定义了一个accept()方法,该方法被列表中的每个文件调用一次。
它的通常形式如下:
boolean accept(File path)
如果文件被包括在列表中(即与path参数匹配的文件),accept()方法返回true,如果不被包括,则返回false。
1 package io; 2 3 import java.io.File; 4 5 public class FileTest9 6 { 7 public static void deleteAll(File file) 8 { 9 if(file.isFile() || file.list().length == 0)//判断该目录是否为空 10 { 11 file.delete(); 12 } 13 else 14 { 15 File[] files = file.listFiles(); 16 17 for(File f : files) 18 { 19 deleteAll(f);//删除里面的内容 20 21 f.delete();//删除本身 22 } 23 } 24 } 25 26 public static void main(String[] args) 27 { 28 deleteAll(new File("c:\ja")); 29 } 30 }