File类
用来将文件或者文件夹封闭成对象。方便对文件与文件夹的属性信息进行操作。File对象可以作为参数传递给流的构造函数。
流只能操作数据,如果要操作文件的信息就必须要用File类。
构造方法
//将文件封装成对象,可以将已有的和未出现的文件或文件夹封装成对象。
File f = new File(“文件夹及文件路径”);
//
File f = new File(“文件目录”,“文件名”);
//
File d = new File(“c:\\abc”);
File f = new File(d,”c.txt”);
属性和方法
File.separator:目录分隔符
常见方法:
创建
boolean createNewFile():在指定的位置创建文件,如果该文件已经存在,则不创建。返回false。和输出流不一样,输出流对象一建立就会创建文件,而且文件已经存在后,会覆盖。
createTempFile():创建临时文件
boolean mkdir():创建文件夹。只能创建一级目录
boolean mkdirs():创建多级文件夹
删除
boolean delete():删除失败返回false
void deleteOnExit():在程序退出时删除指定文件。
判断
boolean canExecute():判断文件及路径可否执行
canRead():判断文件是否可读
canWrite():判断文件是否可写
comparTo():排序
boolean exists():文件是否存在
boolean isDirectory():判断是否是文件夹。
boolean isFile():判断是否是文件
//记住:在判断文件对象是否是文件或者是目录时,必须要先判断该文件对象封闭的内容是否存在。通过exists判断。
isAbsolutePath():是否是绝对路径
获取信息
String getName():获取名称
String getPath():获取路径
String getParent():返回的是绝对路径中的文件父目录。如果获取的是相对路径,返回null。如果相对路径有上一层目录,那么这个目录就是返回结果。
String AbsolutePath():获取绝对路径
File AbsoluteFile():获取绝对路径,将返回封装成file对象。
long lastModified():获取最后一次修改的时间
long length():获取文件大小
renameTo():更改文件名,也可修改路径
File[] listRootsDemo():返回盘符
String[] list(FilenameFilterfileFilter):返回目录下的文件及目录的列表。如果不是目录的话,返回的是null. 如有参数,为文件名过滤器。
例:
File dir = new File(“d:\\aaa\\bb”) ;
String[] arr = dir.list(new FilenameFilter()){
public booleanaccept(File dir ,String name){
returnname.endsWith(“.bmp”);
}
}
File[] listFiles():返回文件夹下所有文件及文件夹的对象
实例:
列出指定目录下文件或者文件夹,包含子目录中的内容。也就是说列出指定目录下的所有内容。
递归:函数自身调用自身,
递归要注意:1. 限定条件 2. 要注意递归的次数,避免内存溢出。
class FileDemo{
public static voidmain(String[] args){
File dir =new File(“c:\\”);
showDir(dir);
}
public static void showDir(file dir){
System.out.println(dir);
file[]files = dir.listFiles();
for(intx=0;x<files.length;x++){
if(files[x].isDirectory())
showDir(files[x]);
else
System.out.println(files[x]);
}
}
}
------------------
带层次
public static String getLevel(int level){
StringBuffer sb = new StringBuffer();
for(int x=0;x<level;x++){
sb.append("--");
}
return sb.toString();
}
public static void show(File file,int level){
System.out.println(getLevel(level)+file.getName());
level++;
File[] filetmp = file.listFiles();
for(int x=0;x<filetmp.length;x++){
if(filetmp[x].isDirectory()){
show(filetmp[x],level);
}else{
System.out.println(getLevel(level)+filetmp[x]);
}
}
}
实例2: 删除一个带内容的目录
删除原理:
在widow中,删除目录从里面往外删除。既然是从里往外删,就需要用到递归。
public static void removeFile(File file){
System.out.println(file);
File[] dir = file.listFiles();
for(int x=0;x<dir.length;x++){
if(dir[x].isDirectory())
removeFile(dir[x]);
else
dir[x].delete();
}
file.delete();
}