一. 文件

我们想要实现IO操作,就必须要知道硬盘上文件的表现形式
Java提供了一个类让我们操作硬盘上的文件:File
File也就是文件表现形式

1.File:文件和目录(文件夹)路径名的抽象表示。

(1) 构造方法:

  1. public File(String pathname)
    通过将给定的路径名字符串转换为抽象路径名来创建新的
    File实例。 如果给定的字符串是空字符串,则结果是空的抽象路径名。

    2.public File(String parent,String child)
    从父路径名字符串和子路径名字符串创建新的File实例。

    3.public File(File parent,String child)
    从父抽象路径名和子路径名字符串创建新的File实例。

public class FileDemo1 {public static void main(String[] args) {//public File(String pathname) 根据一个路径得到一个File对象//F:\demo\a.txt封装成一个File对象File file = new File("F:\\shujia\\demo\\a.txt");System.out.println(file);//public File(File parent,String child)//父的路径:F:\shujia\demo//子路径:b.txtFile file1 = new File("F:\\shujia\\demo", "b.txt");System.out.println(file1);//public File(File parent,String child)//父的路径:F:\shujia\demo//子路径:b.txtFile file2 = new File("F:\\shujia\\demo");File file3 = new File(file2, "b.txt");System.out.println(file3);}
}

(2) 创建功能

  1. public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。

  2. public boolean mkdir() :创建由此抽象路径名命名的目录,如果目标文件夹已经存在,就不创建了,返回false

  3. public boolean mkdirs():创建多级文件夹

public class FileDemo2 {public static void main(String[] args) {//需求:我想在F盘下面创建一个文件夹demo2//封装成File对象,不需要文件或者目录是否已经存在,它只
//是将一个路径抽象的用File表示//将来你可以用File类中的一些方法,来进行创建或者删除File file = new File("F:\\test");System.out.println(file.mkdir());//public boolean mkdir() 创建由此抽象路径名命名的目//录,如果目标文件夹已经存在,就不创建了,返回falseFile file2 = new File("F:\\test\\a.txt");try {//public boolean createNewFile()当且仅当具有该名称的//文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。System.out.println(file2.createNewFile());}catch (IOException i){i.printStackTrace();}//public boolean mkdirs() 创建多级文件夹File file1 = new File("F:\\dashuju\\demo\\demo1");System.out.println(file1.mkdirs());//注意1:要想在某个目录下创建文件,前提是该目录必须存在!!//此情况下该目录不存在所以就创建不了新的文件File file3 = new File("F:\\dashuju\\demo\\a.txt");try {System.out.println(file3.createNewFile());//系统找不到指定的路径。}catch (IOException i){i.printStackTrace();//注意2:将来你要搞清楚是想要创建文件还是创建文件夹,//骑白马的不一定是王子,还有可能是唐僧}}
}

(3) 删除功能:

public boolean delete()

import java.io.File;
import java.io.IOException;/*删除功能:public boolean delete()*/
public class FileDemo3 {public static void main(String[] args) {//删除一个文件File file = new File("F:\\a.txt");try {System.out.println(file.createNewFile());}catch (IOException i){i.printStackTrace();}System.out.println(file.delete());//删除一个多级文件夹  File file1 = new File("aaa\\bbb\\ccc");System.out.println(file1.mkdirs());System.out.println(file1.delete());//此时只删除了ccc文件夹,要想删除aaa文件夹必须把aaa文件夹删除//到为空为止File file2 = new File("aaa\\bbb");System.out.println(file2.delete());//此时又删除了bbb文件夹//需求:我想删除aaa这个文件夹//注意:要删除的目录必须是为空File file3 = new File("aaa");System.out.println(file3.delete());//此时把aaa文件夹删除了}
}

(4)重命名功能

public boolean renameTo(File dest)

将文件夹a的名字改为大数据

public class FileDemo4 {public static void main(String[] args) {File file = new File("F:\\a");File file1 = new File("F:\\大数据");System.out.println(file.renameTo(file1));}
}

(5)判断功能

public boolean isDirectory() :判断是否是文件夹
public boolean isFile():判断是否是文件
public boolean exists():判断目标文件或者文件夹是否存在
public boolean canRead():判断是否可读
public boolean canWrite():判断是否可写
public boolean isHidden():判断是否隐藏

public class FileDemo5 {public static void main(String[] args) {//public boolean isDirectory() 判断是否是文件夹File file = new File("F:\\大数据");System.out.println(file.isDirectory());//true//public boolean isFile() 判断是否是文件System.out.println(file.isFile());//false//public boolean exists() 判断目标文件或者文件夹是否存在System.out.println(file.exists());//true//public boolean canRead() 判断是否可读System.out.println(file.canRead());//true//public boolean canWrite() 判断是否可写System.out.println(file.canWrite());//true//public boolean isHidden() 判断是否隐藏System.out.println(file.isHidden());//false}
}

(6) 基本获取功能

public String getAbsolutePath():获取绝对路径,或者说完整路径,是带盘符的路径
public String getPath():获取相对路径,不带盘符
public String getName():获取名称
public long length():获取的长度是字节数
public long lastModified(): //1645064059299 精确到毫秒
//返回的是一个时间戳:值得是你在最后一次修改文件的时间,时间戳是在1970 1月 1日开始

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;public class FileDemo6 {public static void main(String[] args) {//public String getAbsolutePath()//获取绝对路径,或者说完整路径,是带盘符的路径File file = new File("大数据");System.out.println(file.getAbsolutePath());//F:\soft\idea2021\idea projects\大数据//public String getPath()//获取相对路径,不带盘符System.out.println(file.getPath());//大数据//public String getName()//获取名称File file1 = new File("F:\\大数据\\a.txt");System.out.println(file1.getName());//a.txt//public long length()//获取的长度是字节数System.out.println(file1.length());//34//public long lastModified()//1645064059299  精确到毫秒//返回的是一个时间戳:值得是你在最后一次修改文件的时间,//时间戳是在1970 1月 1日开始System.out.println(file1.lastModified());//1645101188860//java将时间戳与日期进行转换//Date(long date)//分配一个 Date对象,并将其初始化为表示自称为“时代”的标//准基准时间以后的指定毫秒数,即1970年1月1日00:00:00 GMT。Date date = new Date(file1.lastModified());System.out.println(date);//Thu Feb 17 20:33:08 CST 2022//转换时间格式SimpleDateFormat sp = new SimpleDateFormat("yyyy/MM/DD EEE HH:mm:ss");System.out.println(sp.format(date));//2022/02/48 星期四 20:33:08}
}

结果:

(6) 高级获取功能

public String[] list()
public File[] listFiles()

public class FileDEmo7 {public static void main(String[] args) {//public String[] list()//获取指定目录下的所有文件和文件夹的名称组成的数组File file = new File("F:\\dashuju\\demo");String[] list = file.list();for (String list1:list){System.out.println(list1);}/*结果:a.txtb.txtdemo1demo2*/System.out.println("=============");//public File[] listFiles()//获取指定目录下的所有文件和文件夹形成的File对象数组File[] files = file.listFiles();for (File files1:files){System.out.println(files1);/*结果:F:\dashuju\demo\a.txtF:\dashuju\demo\b.txtF:\dashuju\demo\demo1F:\dashuju\demo\demo2*/}}
}

结果:

(7) 需求:判断D盘下面有没有.png后的文件,如果有,就输出此文件名称

分析:     1、将D盘根目录封装成一个File对象2、获取该目录下所有的文件或者文件夹组成的File对象数组3、遍历File数组,得到每一个File对象,然后判断是否是文件是:继续判断是否以.jpg后缀是:输出名称不是:不管他不是:不管他

方法一:

public class FileDemo8 {public static void main(String[] args) {File file = new File("F:\\");File[] files = file.listFiles();for (File s:files){if (s.isFile()){if (s.getName().endsWith(".png")){System.out.println(s.getName());}}}}
}

方法二:判断D盘下面有没有.jpg后的文件,如果有,就输出此文件名称

分析:
1、先获取所有的文件和文件夹,然后在遍历的时候,再去判断是否是文件,是否是.jpg后缀的,最后再将满足条件的文件过滤出来获取到名称。
2、在获取的时候,获取到的数据就是满足条件的,我们直接输出就可以了。

文件名称过滤器的实现思想及代码
public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)

import java.io.File;
import java.io.FilenameFilter;public class FileDemo9 {public static void main(String[] args) {File file = new File("F:\\");File[] files = file.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {//return  false;
//                return true;//通过测试发现,目录下的文件或者文件夹该不该获取到,却决于这里的//返回值//true,就获取到加到数组,如果是false,就不获取,不加到数组中
//                System.out.println(dir);
//                System.out.println(name);File file1 = new File(dir, name);boolean f = file1.isFile();boolean b = name.endsWith(".png");return f && b;}});for (File s:files)System.out.println(s);}
}

二.递归

1、递归的概述

递归:方法定义中调用方法本身的现象

Math.max(Math.max(a,b),c) 这样的现象仅仅是方法的嵌套不是方法的递归使用

举例:
1、从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事的内容是:
从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事的内容是:
从前有座山,山里有座庙,庙里有个老和尚,老和尚在给小和尚讲故事,故事的内容是:

庙倒了,老和尚圆寂了。

2、学习大数据 – 高薪就业 – 挣钱 – 娶媳妇 – 生娃 – 挣学费:
学习大数据 – 高薪就业 – 挣钱 – 娶媳妇 – 生娃 – 挣学费:
学习大数据 – 高薪就业 – 挣钱 – 娶媳妇 – 生娃 – 挣学费:

娶不到媳妇,生不了娃。

2.递归注意事项

1、递归一定要有一个出口(结束条件),否则就成了死递归
2、递归的次数不能太多,否则会造成,栈内存溢出
3、构造方法不能发生递归

3.需求:用代码求出实现5的阶乘

分析:

  5! = 5*4*3*2*1= 5*4!= 5*4*3!= 5*4*3*2!= 5*4*3*2*1!1、用循环解决2、用递归解决
public class DiGui11 {public static void main(String[] args) {int s=1;for (int i=1;i<=5;i++){s*=i;}System.out.println(s);System.out.println("5的阶层为:"+diGui(5));}/*** 递归方法的前提:*  返回值类型:int*  参数列表:int i**  出口条件:*    if(i==1){return 1}**  递归主体逻辑:*     if(i!=1){*         return i*diGui(i-1);*     }*/public static int diGui(int i){if (i==1){return 1;}else {return i*diGui(i-1);}}
}

过程图:

4. 不死神兔案例。假设有一对兔子,从出生的第三个月开始,每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子。

假设所有的兔子都不会死。问题:二十个月后,兔子的对数是多少?

分析:    找规律:月份      兔子的对数第一个月      1第二个月      1第三个月      2第四个月      3第五个月      5第六个月      8...由此课件,兔子的对数的数据是:1,1,2,3,5,8,13,21,34...规律:1、从第三项开始,每一项都是前两项之和2、说明前两项的数据是已知的怎么去实现呢?1、数组实现2、基本变量实现3、递归实现

定义两个变量为相邻的数据 第1个相邻的数据: a=1,b=1 第2个相邻的数据: a=1,b=2 第3个相邻的数据:
a=2,b=3 第4个相邻的数据: a=3,b=5

规律:下一次相邻的数据,a的值是上一次b的值,b的值是上一次相邻数据的和a+b

public class DiGui12 {public static void main(String[] args) {//用数组实现int[] arr=new int[20];arr[0]=1;arr[1]=1;for (int i=2;i< arr.length;i++){arr[i]=arr[i-1]+arr[i-2];}System.out.println("第20个月后的兔子对数为"+arr[19]);System.out.println("=============================");//基本变量实现//基本变量实现//下一次相邻的数据,a的值是上一次b的值,b的值是上一次相邻数据的和a+bint a=1;int b=1;for (int i=0;i<19;i++){int temp=a;a=b;b=temp+b;}System.out.println("第20个月后的兔子对数为"+a);System.out.println("第20个月后的兔子对数为"+diGui2(20));}//定义的递归方法public static int diGui2(int i){if (i==1||i==2){return 1;}else {return diGui2(i-1)+diGui2(i-2);}}
}

结果:

5.遍历指定目录下所有的指定后缀名文件名称 如.java后缀

分析:
1、将目录封装成File对象
2、获取该目录下所有的File对象组成的数组
3、遍历数组得到每一个File对象
4、判断得到的File对象是一个文件还是一个文件夹
1、如果他是一个文件夹,回到第二步
2、如果他是一个文件,判断文件名称是否以.java后缀
如果是,输出
不是,跳过

public class DiGui13 {public static void main(String[] args) {File file = new File("F:\\大数据");diGui(file);}public static void diGui(File file){File[] files = file.listFiles();for (File f:files){if (f.isDirectory()){diGui(f);}else {if (f.getName().endsWith(".java")){System.out.println(f.getName());}}//bigdata.java}}}

6.递归删除带内容的目录

分析:
1、获取File对象
2、获取该目录下所有的文件和文件夹组成的File对象数组
3、遍历数组得到每一个File对象
4、判断这个File对象是否是文件夹
是:返回第二步
不是:直接删除

public class DiGUi14 {public static void main(String[] args) {File file = new File("F:\\test");delete2(file);}public static void delete2(File file){File[] files = file.listFiles();if (files!=null) {for (File file1 : files) {if (file1.isDirectory()) {delete2(file1);} else {System.out.println("删除的文件为:" + file1.getName()+"---------"+file1.delete());}}System.out.println("删除的文件夹为:" + file.getName()+"--------"+file.delete());}}
}

结果:

【文件和递归】File:创建功能,删除功能,重命名功能,判断功能,基本获取功能,高级获取功能,断有没有.png后的文件,递归:归注意事项,用代码求出实现5的阶乘,不死神兔案例,递归删除带内容的目录相关推荐

  1. JAVA基础初探(十二)Map接口及其常用实现类(HashMap)、File类详解(概述、创建、删除、重命名、文件属性读取/设置、遍历文件夹)

    该篇博客目录 1.Map接口及其常用实现类(HashMap.Hashtable) 2.File类(概述.创建.删除.重命名.文件属性读取/设置.遍历文件夹) 一.Map接口及其常用实现类(HashMa ...

  2. C语言试题七十一之请编写函数求出这个数的阶乘

    1. 题目 编写函数:求出这个数的阶乘,即 n!. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科目.帮助C语言学者打好程序基础.C语言基础,锻炼您的逻辑思 ...

  3. python移动文件到另一个文件夹若有同名文件更改文件名_Python 创建、复制、移动、删除和重命名文件和文件夹...

    我们本文学习使用Python对电脑文件和文件夹进行操作,包括创建.复制.移动.删除和重命名等操作. os.mkdir() 创建文件夹 # 引入 os 模块,下面的代码都默认已引入 os.path.ex ...

  4. Python自动化办公,深度优先搜索文件夹并移动全部doc文件(深度优先算法)以及(文件、文件夹的移动、复制、删除、重命名)

    #endcoding: utf-8# 获取文件的时间属性 # 用到的知识 # os.getcwd() 方法用于返回当前工作目录 # os.path.getatime(file) 输出文件访问时间 # ...

  5. DevExpress的TreeList实现显示本地文件目录并自定义右键实现删除与重命名文件

    场景 使用DevExpress的TreeList显示本磁盘下文件目录并在树节点上右键实现删除与添加文件. 效果 自定义右键效果 实现 首先在包含Treelist的窗体的load方法中对treelist ...

  6. 递归删除带内容的目录

    递归是:方法调用方法本身的一种现象 条件:1)必须有一个方法 2)必须有规律 3)必须存在出口条件(结束条件) 案例: 比如在 项目根目录下有一个demo目录里面有多个文件夹,文件夹中有文件:使用递归 ...

  7. [CentOs7]搭建ftp服务器(3)——上传,下载,删除,重命名,新建文件夹

    摘要 上篇文章介绍了如何为ftp添加虚拟用户,本篇将继续实践如何上传,下载文件. 上传 使用xftp客户端上传文件,如图所示 此时上传状态报错,查看详情 从错误看出是应为无法创建文件造成的.那么我们就 ...

  8. Linux CentOS删除或重命名文件夹和文件的办法

    Linux.CentOS操作系统下如何删除和重命名文件夹呢?办法如下: 一.Linux.CentOS下重命名文件和文件夹 mv:move 用移动文件命令就可以了,因为linux系统没有专门的重命名命令 ...

  9. Python-文件和文件夹的移动、复制、删除、重命名

    转自:http://blog.csdn.net/woshisangsang/article/details/74360612 #文件.文件夹的移动.复制.删除.重命名#导入shutil模块和os模块 ...

最新文章

  1. C#多态性的小记,父类,子类,虚方法,接口
  2. 深入分析新加坡金管局区块链计划 Ubin
  3. Madgwick算法详细解读
  4. js怎么调用wasm_Long.js源码解析
  5. RabbitMQ:计划邮件传递
  6. 桂林理工计算机与科学技术,桂林理工大学信息科学与工程学院
  7. Java案例:使用clone()方法克隆对象
  8. springboot细节挖掘(对测试的支持)
  9. 在SQL Server查询分析器里查询Excel文件数据
  10. 中国AI军团争霸机器阅读理解大赛,搜狗创下全球新纪录
  11. 力扣每日一刷-两数之和(暴力、双指针)
  12. 如何成为一名合格的CRUD工程师?
  13. 【机器学习课程笔记(吴恩达)】2.2 代价函数
  14. SENSOR DVP接口介绍
  15. IC卡管理系统(Java基础)
  16. 把脉大连接:“多端协同”的大动脉与“多人协作”的主动脉
  17. 项目导入阿里字体图标库
  18. echarts 饼状图 (数据为0或很小的扇形显示问题、扇形间隔)
  19. RK 机械键盘左端WIN键与ALT键互换了,已解决
  20. 同轴电缆抗干扰措施(二)

热门文章

  1. 引用echerts图表
  2. 汽车tbox是车联网系统
  3. 怎样做思维导图?可以试试这三个方法
  4. c语言error_t错误码,怎么 就是 错误呢
  5. [工具] alx 和 jad 文件生成器 BerryCreate 2.0 分享
  6. mysql培训二_MySQL学习(二)
  7. Oracle 大表回表过滤优化案例
  8. matlab 基因表达谱,如何进行基因表达谱芯片的数据分析
  9. matplotlib坐标轴把刻度竖过来显示
  10. plt数据图去边框 python3_Python数据可视化:绘制持仓榜单的“棒棒糖图”