黑马程序员——高新技术---Java基础-IO流_File类,递归思想

-----------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.我们知道,删除文件和目录使用:Filedelete()方法,但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培训、期待与您交流! -------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值