-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
java.io.File类
File:文件和目录路径名的抽象表示形式
1,它代表磁盘上的文件或目录
2,它内部封装了一些方法,可以查看此文件或目录的一些信息:
文件/目录是否存在,判断文件还是目录,文件/目录大小,修改时间,是否可读,可写,隐藏……
构造方法:
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
代码体现:
// File(String pathname):根据一个路径得到File对象
//把e:\\demo\\a.txt封装成一个File对象
File file= new File("E:\\demo\\a.txt");
// File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
File file2= new File("E:\\demo", "a.txt");
// File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象
File file3= new File("e:\\demo");
File file4= new File(file3, "a.txt");
// 以上三种方式其实效果一样
创建功能:
public booleancreateNewFile():创建文件如果存在这样的文件,就不创建了
public boolean mkdir():创建文件夹如果存在这样的文件夹,就不创建了
public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
记住这个:
File file8 = new File("e:\\liuyi\\a.txt");//这个创建的a.txt还是目录。mkdirs只能创建目录。
System.out.println("mkdirs:"+ file8.mkdirs());
删除功能:public boolean delete()
注意:
A:如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
B:Java中的删除不走回收站。
C:要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹(如果要删除多级目录,后面会有递归方法)。
重命名功能:public boolean renameTo(File dest)
如果路径名相同,就是改名。
如果路径名不同,就是改名并剪切。
路径以盘符开始:绝对路径 c:\\a.txt
路径不以盘符开始:相对路径 a.txt
判断功能:
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏
获取功能:
publicString getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
public long length():获取长度。字节数
public long lastModified():获取最后一次的修改时间,毫秒值
获取功能:
public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
怎么使用?
1,如果仅仅需要此目录下的文件或目录的名称,没有其他后续操作,就是用list();
2,如果需要对此目录下的子文件或者子目录进行后续的操作,例如,查找某些文件,对某些文件重命名等……,使用listFile();
练习题:
1:输出指定目录下指定后缀名的文件名称案例。
思路:
1,获取指定目录下的所有文件和目录的名称:list()
2,遍历数组,获取每个文件和目录的名称
3,判断是否是以.txt结尾。endwith()
2,文件名称过滤器的实现思想及代码
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)
3,批量修改文件名称案例:
要求:将D:\20150617\day17下的所有的.avi文件,重命名到D:\20150617\day17\avi\
并将原文件名中的"集合框架"字样去掉;
1.使用File封装原目录;D:\20150617\day17
2.使用File封装目标目录;D:\20150617\day17\avi
3.盘目标目录是否存在,如果不存在,则创建;
4.获取原目录下所有文件和目录:File[] listFiles()
5.遍历原目录下的所有文件和目录。判断.avi文件;
是:1).获取文件名;
2).将文件名中的"集合框架"字样去掉,获得一个新文件名;
3).使用目标"目录的File"和"新文件名"构造一个新的File对象;
4).调用原文件对象的renameTo(新File对象);
递归概述和注意事项:
递归调用:方法自己调用自己。
注意事项:
要有出口,否则就是死递归。
次数不能太多,否则内存溢出,递归调用比循环开销要大很多。
构造方法不能递归调用。
有些问题可以使用循环处理,那么尽量不要使用递归。
练习:
递归输出指定目录下所有的java文件的绝对路径案例
(1)题目:列出D:\\20150118目录下的所有Java文件
1.使用File封装原目录:D:\\20150118;
2.列出目录下所有文件和目录;listFiles()
3.遍历;
4.判断是否是Java文件:
是:输出
否:判断是否是目录:
是:回到2(从2到此,做一个方法,作为递归调用的方法)
否:不管;
代码体现:
public class Demo {
publicstatic void main(String[] args) {
//1.封装原目录
Filefile = new File("D:\\20150118");
//2.递归调用
findFile(file,".java");
}
publicstatic void findFile(File file ,String flag){
File[]fileArray = file.listFiles();
for(Filef : fileArray){
if(f.isFile()&& f.getName().endsWith(flag)){
//输出绝对路径
System.out.println(f.getAbsolutePath());
}elseif(f.isDirectory()){
//递归调用
findFile(f,flag);
}
}
}
}
(2)递归删除带内容的目录案例
1.我们知道,删除文件和目录使用:File的delete()方法,但delete()方法只能删除空目录,
如果目录下有内容,则无法删除。
2.所以,我们要递归删除目录下的所有文件,然后再删除目录;
步骤:
1.封装原目录;D:\\bbb -副本
2.判断:原目录是否是文件:
是:直接删除
否:1).列出目录下所有的文件和目录;
2).遍历:
获取每个文件和目录,回到2(到2做一个递归方法)
代码体现:
public class Demo {
publicstatic void main(String[] args) {
File file = new File("D:\\bbb - 副本");
deleteFile(file);
System.out.println("删除完毕!");
}
privatestatic void deleteFile(File file) {
if(file.isFile()){//判断是一个文件
file.delete();
}else{//是一个目录
File[]fileArray = file.listFiles();
for(Filef : fileArray){
deleteFile(f);
}
//删除目录
file.delete();
}
}
}
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------