22_IO_第22天(File、递归)_讲义

今日内容介绍
1、File
2、递归

1322549-20180831180709848-282686936.png

xmind:下载地址:

链接:https://pan.baidu.com/s/1Eaj9yP5i0x4PiJsZA4StQg 密码:845a

01IO技术概述

* A:IO技术概述* a: Output* 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作* b: Input* 把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作* c: IO操作* 把上面的这种输入和输出动作称为IO操作

02File类的概述和作用

* A:File类的概述和作用* a: File的概念* File类是文件和目录路径名的抽象表示形式* Java中把文件或者目录(文件夹)都封装成File对象* 我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可

03File类静态的成员变量

* A:File类静态的成员变量* a: pathSeparator* 与系统有关的路径分隔符,为了方便,它被表示为一个字符串* b: separator* 与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串* c: 案例代码/**  java.io.File*    将操作系统中的,文件,目录(文件夹),路径,封装成File对象*    提供方法,操作系统中的内容*    File与系统无关的类*    文件 file*    目录 directory*    路径 path*/public class FileDemo {public static void main(String[] args) {//File类静态成员变量//与系统有关的路径分隔符String separator = File.pathSeparator;System.out.println(separator);// 是一个分号,目录的分割(window中环境变量配置各个路径用分号分割,表示一个完整的路径结束)  Linux中是冒号 ://与系统有关的默认名称分隔符separator = File.separator;System.out.println(separator);// 向右 \  目录名称分割  Linux / }}

04File类构造方法_1

* A: File类构造方法_1* a: File(String pathname)* 通过将给定路径名字符串转换为一个File对象,之后可以使用File中的方法* windows中的路径或文件名不区分大小写* d: 案例代码public class FileDemo1 {public static void main(String[] args) {function();}/**  File(String pathname)*  传递路径名: 可以写到文件夹,可以写到一个文件*  c:\\abc   c:\\abc\\Demo.java*  将路径封装File类型对象*/public static void function(){File file = new File("d:\\eclipse");System.out.println(file);}}

05相对路径和绝对路径

* A: 相对路径和绝对路径* a: 绝对路径* 绝对路径是一个固定的路径,从盘符开始* b: 相对路径* 相对路径相对于某个位置,在eclipse下是指当前项目下  * c: 路径绝对路径在系统中具有唯一性c:\\windows\\system32相对路径表示路径之间的关系D:\\develop\\Java\\jdk1.7.0_72\\binD:\\develop\\Java\\jre7路径之间关系Java 父目录是D:\\developJava 子目录是:jdk1.7.0_72父路径是 唯一性子目录是可以多个

06File类的构造方法_2

* A: File类的构造方法_2* a:File(String parent, String child) * 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 对象* b: File(File parent, String child)* c: 案例代码public class FileDemo1 {public static void main(String[] args) {function_2();}/**  File(File parent,String child)*  传递路径,传递File类型父路径,字符串子路径*  好处: 父路径是File类型,父路径可以直接调用File类方法*/public static void function_2(){File parent = new File("d:");File file = new File(parent,"eclipse");System.out.println(file);}/**  File(String parent,String child)*  传递路径,传递字符串父路径,字符串子路径*  好处: 单独操作父路径和子路径*/public static void function_1(){File file = new File("d:","eclipse");System.out.println(file);}}

07File类创建文件功能

* A: File类创建文件功能* a: public boolean createNewFile()* 创建文件 如果存在这样的文件,就不创建了* b: 案例代码public class FileDemo2 {public static void main(String[] args)throws IOException {function();}                       /**  File创建文件的功能*  boolean createNewFile()*  创建的文件路径和文件名,在File构造方法中给出*  文件已经存在了,不在创建*/public static void function()throws IOException{File file = new File("c:\\a.txt");boolean b = file.createNewFile();System.out.println(b);}}

08File类创建目录功能

* A: File类创建目录功能* a: 创建目录* public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了* public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来* b: 案例代码public class FileDemo2 {public static void main(String[] args)throws IOException {function_1();}/**  File创建文件夹功能*  boolean mkdirs() 创建多层文件夹*  创建的路径也在File构造方法中给出*  文件夹已经存在了,不在创建*/public static void function_1(){File file = new File("c:\\abc");boolean b = file.mkdirs();System.out.println(b);}               }

09File类删除功能

* A: File类删除功能* a: 删除功能* public boolean delete():删除文件或者文件夹
* B: 案例代码public class FileDemo2 {public static void main(String[] args)throws IOException {function_2();}/**  File类的删除功能*  boolean delete()*  删除的文件或者是文件夹,在File构造方法中给出*  删除成功返回true,删除失败返回false*  删除方法,不走回收站,直接从硬盘中删除*  删除有风险,运行需谨慎*/public static void function_2(){File file = new File("c:\\a.txt");boolean b = file.delete();System.out.println(b);}           }

10File类获取功能

* A:File类获取功能* a: 方法介绍* String getName(): 返回路径中表示的文件或者文件夹名* 获取路径中的最后部分的名字* long length(): 返回路径中表示的文件的字节数* String getAbsolutePath(): 获取绝对路径,返回String对象* File   getAbsoluteFile() : 获取绝对路径,返回File对象* eclipse环境中,写一个相对路径,绝对位置工程根目录* String getParent(): 获取父路径,返回String对象* File getParentFile(): 获取父路径,返回File对象* b: 案例代码public class FileDemo3 {public static void main(String[] args) {function_3();}/** File类的获取功能* String getParent() 返回String对象* File getParentFile()返回File对象* 获取父路径*/public static void function_3(){File file = new File("d:\\eclipse\\eclipse.exe");File parent = file.getParentFile();System.out.println(parent);}/** File类获取功能* String getAbsolutePath() 返回String对象* File   getAbsoluteFile() 返回File对象* 获取绝对路径* eclipse环境中,写的是一个相对路径,绝对位置工程根目录*/public static void function_2(){File file = new File("src");File absolute = file.getAbsoluteFile();System.out.println(absolute);}/** File类获取功能* long length()* 返回路径中表示的文件的字节数*/public static void function_1(){File file = new File("d:\\eclipse\\eclipse.exe");long length = file.length();System.out.println(length);}/**  File类的获取功能*  String getName()*  返回路径中表示的文件或者文件夹名*  获取路径中的最后部分的名字*/public static void function(){File file = new File("d:\\eclipse\\eclipse.exe");String name = file.getName();System.out.println(name);/*String path = file.getPath();System.out.println(path);*///      System.out.println(file);}}

11File类判断功能

* A: File类判断功能* a: 方法介绍* boolean exists(): 判断File构造方法中封装路径是否存在* 存在返回true,不存在返回false* boolean isDirectory(): 判断File构造方法中封装的路径是不是文件夹* 如果是文件夹,返回true,不是文件返回false* boolean isFile(): 判断File构造方法中封装的路径是不是文件* 如果是文件,返回true,不是文件返回false* b: 案例代码public class FileDemo4 {public static void main(String[] args) {function_1();}/**  File判断功能*  boolean isDirectory()*  判断File构造方法中封装的路径是不是文件夹*  如果是文件夹,返回true,不是文件返回false*  *  boolean isFile()*  判断File构造方法中封装的路径是不是文件*/public static void function_1(){File file = new File("d:\\eclipse\\eclipse.exe");if(file.exists()){boolean b = file.isDirectory();System.out.println(b);}}/**  File判断功能*  boolean exists()*  判断File构造方法中封装路径是否存在*  存在返回true,不存在返回false*/public static void function(){File file = new File("src");boolean b = file.exists();System.out.println(b);}}

12File类list获取功能

* A: File类list获取功能* a: 方法介绍* String[] list():获取到File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)* 返回只有名字* File[] listFiles():获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)* 返回的是目录或者文件的全路径* static File[] listRoots(): 列出可用的文件系统根 * b: 案例代码public class FileDemo {public static void main(String[] args) {function_2();}public static void function_2(){//获取系统中的所有根目录File[] fileArr = File.listRoots();for(File f : fileArr){System.out.println(f);}}/**  File类的获取功能*  File[] listFiles()*  获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)*  返回的是目录或者文件的全路径*/public static void function_1(){File file = new File("d:\\eclipse");File[] fileArr = file.listFiles();for(File f : fileArr){System.out.println(f);}}/**  File类的获取功能*  String[] list()*  获取到,File构造方法中封装的路径中的文件和文件夹名 (遍历一个目录)*  返回只有名字*/public static void function(){File file = new File("c:");String[] strArr = file.list();System.out.println(strArr.length);for(String str : strArr){System.out.println(str);}}}

13文件过滤器

* A: 文件过滤器* a: 作用* 过滤一个目录下的指定扩展名的文件,或者包含某些关键字的文件夹* b: 方法介绍* public String[] list(FilenameFilter filter)* public File[] listFiles(FileFilter filter)* C: 案例代码   /**  自定义过滤器*  实现FileFilter接口,重写抽象方法*/public class MyFilter implements FileFilter{public boolean accept(File pathname)  {/** pathname 接受到的也是文件的全路径* c:\\demo\\1.txt* 对路径进行判断,如果是java文件,返回true,不是java文件,返回false* 文件的后缀结尾是.java*///String name = pathname.getName();return pathname.getName().endsWith(".java");}}/**  File类的获取,文件获取过滤器*  遍历目录的时候,可以根据需要,只获取满足条件的文件*  遍历目录方法 listFiles()重载形式*  listFiles(FileFilter filter)接口类型*  传递FileFilter接口的实现类*  自定义FileFilter接口实现类,重写抽象方法,*  接口实现类对象传递到遍历方法listFiles*/public class FileDemo1 {public static void main(String[] args) {File file = new File("c:\\demo");File[] fileArr = file.listFiles(new MyFilter());for(File f : fileArr){System.out.println(f);}}}

14文件过滤器_原理分析

1322549-20180831180809764-1940541655.jpg

* A:文件过滤器_原理分析* listFiles()遍历目录的同时,获取到了文件名全路径,调用过滤器的方法accept,* 将获取到的路径传递给accept方法的参数pathname* accept方法接收了参数pathname,参数是listFiles传递来的* 在accept方法中,进行判断,如果这个路径是Java文件,返回true,走着返回false* 一旦方法返回了true* listFiles将路径保存到File数组中

15递归遍历全目录

1322549-20180831180826136-834166807.jpg

* A: 递归遍历全目录* a: 案例代码/**  对一个目录的下的所有内容,进行完全的遍历*  编程技巧,方法的递归调用,自己调用自己*/public class FileDemo {public static void main(String[] args) {File dir = new File("d:\\eclipse");getAllDir(dir);}/**  定义方法,实现目录的全遍历*/public static void getAllDir(File dir){System.out.println(dir);//调用方法listFiles()对目录,dir进行遍历File[] fileArr = dir.listFiles();for(File f : fileArr){//判断变量f表示的路径是不是文件夹if(f.isDirectory()){//是一个目录,就要去遍历这个目录//本方法,getAllDir,就是给个目录去遍历//继续调用getAllDir,传递他目录getAllDir(f);}else{System.out.println(f);}}}}

16递归概念和注意事项

* A:递归概念和注意事项* a: 递归概念* 递归,指在当前方法内调用自己的这种现象* 递归分为两种,直接递归和间接递归* 直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法* b: 注意事项* 递归一定要有出口, 必须可以让程序停下* 递归次数不能过多* 构造方法,禁止递归

17递归求和计算

1322549-20180831180837707-679988586.jpg

* A: 递归求和计算* a: 题目分析* 1+2+3+...+(n-1)+n:求1到n的和* 总结规律:1到n的和等于1到(n-1)的和再加n* getSum(n-1)+ n* 递归出口:getSum(1) return 1;* b: 案例代码   /**  方法的递归调用*    方法自己调用自己*  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化*  注意:*     递归一定要有出口, 必须可以让程序停下*     递归次数不能过多*     构造方法,禁止递归*/public class DiGuiDemo {public static void main(String[] args) {int sum = getSum(3);System.out.println(sum);}/**  计算 1+2+3+100和 = 5050*  计算规律:*    n+(n-1)+(n-2)*    100+(100-1)+(99-1)+...1*/public static int getSum(int n){if( n == 1)return 1;return n + getSum(n-1);}}

18递归求阶乘

* A: 递归求和计算* a: 题目分析* 5!=5*4*3*2*1*   =5*4!* 4!=4*3!* 3!=3*2!* 2!=2*1!* 1!=1* n!=n*(n-1)!* 递归出口:n*getJieCheng(n-1):  getJieCheng(1) return 1;* b: 案例代码/**  方法的递归调用*    方法自己调用自己*  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化*  注意:*     递归一定要有出口, 必须可以让程序停下*     递归次数不能过多*     构造方法,禁止递归*/public class DiGuiDemo {public static void main(String[] args) {                    System.out.println(getJieCheng(5));}/* *  计算阶乘 5!*   5*4*3*2*1*/public static int getJieCheng(int n){if ( n == 1)return 1;return n * getJieCheng(n-1);}                               }

19递归计算斐波那契数列

1322549-20180831180900123-1555451436.jpg

* A: 递归计算斐波那契数列* a:题目分析* 1 1 2 3 5 8 13 21* 从第三项开始,后面的每一项都等于前面两项的和,第一项和第二项的值为1,作为程序的出口* b: 案例代码/**  方法的递归调用*    方法自己调用自己*  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化*  注意:*     递归一定要有出口, 必须可以让程序停下*     递归次数不能过多*     构造方法,禁止递归*/public class DiGuiDemo {public static void main(String[] args) {                    System.out.println(getFBNQ(12));}/**  方法递归,计算斐波那契数列*  */public static int getFBNQ(int month){if( month == 1)return 1;if( month == 2)return 1;return getFBNQ(month-1)+getFBNQ(month-2);}}

20遍历目录下的所有java文件

* A: 遍历目录下的所有java文件* a: 案例代码public class MyJavaFilter implements FileFilter {public boolean accept(File pathname) {//判断获取的是目录,直接返回trueif(pathname.isDirectory())return true;return pathname.getName().toLowerCase().endsWith(".java");}}/**  遍历目录,获取目录下的所有.java文件*  遍历多级目录,方法递归实现*  遍历的过程中,使用过滤器*/public class FileDemo1 {public static void main(String[] args) {getAllJava(new File("c:\\demo"));//      new File("c:\\demo").delete();}/** 定义方法,实现遍历指定目录* 获取目录中所有的.java文件*/public static void getAllJava(File dir){//调用File对象方法listFiles()获取,加入过滤器File[] fileArr = dir.listFiles(new MyJavaFilter());for(File f : fileArr){//对f路径,判断是不是文件夹if(f.isDirectory()){//递归进入文件夹遍历getAllJava(f);}else{System.out.println(f);}}}

作业测试

1.使用文件名称过滤器筛选将指定文件夹下的小于200K的小文件获取并打印。

2.从键盘接收一个文件夹路径,统计该文件夹大小。

3.从键盘接收一个文件夹路径,删除该文件夹。

4.从键盘接收一个文件夹路径,把文件夹中的所有文件以及文件夹的名字按层级打印

例如:
aaa是文件夹,里面有bbb.txt,ccc.txt,ddd.txt这些文件,有eee这样的文件夹,eee中有fff.txt和ggg.txt,打印出层级来
aaabbb.txtccc.txtddd.txt eeefff.txtggg.txt

5.键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,

用个数作为value,放入到map集合中,并用两种方式遍历map集合
例如:
doc 的类型的文件有  3 个
java 的类型的文件有  5 个
txt 的类型的文件有  7 个

如果想进一步的交流,可以加入我们的QQ群,里面有最新的学习资料,可以学习。

1322549-20180831181935648-1840463559.png

转载于:https://www.cnblogs.com/wanghui1234/p/9567288.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAC PHP7 如何disable xdebug

1. 查看xdebug当前状态是否是enable 打开terminal,输入: php -m | grep xdebugterminal返回xdebug,说明现在xdebug是enable状态。 2.找到php配置文件夹 在terminal中输入: which php 进入php.d文件夹,可以看到exten…

物联网初步之电阻性电路分析 第三部分 电路分析方法和电路原理

目录 电阻性电路分析第三章 电路分析方法3-1 支路电流法3-2 网孔电流法3-3 节点电位法3-4本章总结第四章 电路定理4-1 叠加定理戴维南定理和诺顿定理电阻性电路分析 声明:本学习笔记中的部分图片来自于王丽华老师的PPT,感想王老师~~ 第三章 电路分析方法…

将页面数据转json存入数据库

SSMlayui前台页面将数据转json存入数据库 最近做了一个添加的功能,页面中的字段并不是和数据库变字段一 一对应的,页面中好几个字段的值要把它们转为json,然后存入数据库表中的一个字段。 1,首先是添加了一个实体类来放这些数据…

简述openstack

大家好,我顾某人又回来了,开学第一更。。。。以下内容均为个人理解和整理,有不对的地方还望dalao指正。。。。。 本文所用图片均已标明来源。 openstack是什么? OpenStack是一个开源的云计算管理平台项目,由几个主要的…

vue+layui获取CheckBox的值

vuelayui获取CheckBox的值 定义一样的name和v-filter 然后对其进行监听。

rocket-console控制台安装

1.下载 github地址:https://github.com/apache/rocketmq-externals 2.选择稳定版本: 3.下载到本地: 环境需求 maven jdk git clone https://github.com/apache/rocketmq-externals.git 4.修改配置: find -name application…

只允许对最后一条记录进行修改

今天做了个小功能想和大家分享一下在我任务描述里有个这样的描述:只能对最后一条记录进行修改。我刚开始我这样想的,每条记录前面都有给他一个radio,然后对你选择的数据去判断他是不是最后添加的那一条,后台发现这样有点难度&…

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log。 一般可通过log_error设置 mysql> select log_error; ---------------…

vue复选框CheckBox清空选中的值

最近遇到了这样的一个问题,做了一个添加功能,发现添加了一次记录以后,添加第二次的时候,页面上复选框有我上次选中的值,后来试了很多方法,只有下面这个方法解决了这个问题。上面标出来的是对普通的input进行…

添加时,时间格式明明和数据库格式一样,却一直在报错,存不进去

数据库用的date,然后我前台也用的date格式,却存不进去,我还以为是缓存问题,然后一直在清缓存,结果没啥用, 后来在实体类加了DateTimeFormat这个注解,成功解决。

freemarker页面读取时间date类型报错

以前写过一篇添加时间添加失败的问题,现在我又发现了另外一个问题 刚开始我是这样放进页面,然后就报错,说freemarker的类型错误。我就去控制器打印输出这个时间,发现是有值得,但不是yyyy-mm-dd格式的,我数…

关于idea的git账号与电脑的git账号不一致的问题。已解决!

最近发现了一个问题,我进公司,公司给我发的电脑是别的同事用过的,然后上面呢保留了他的git账号,我要继续用这台电脑开发,用他的账号肯定是不行的,然后我就上网搜教程,搜到的教程全部都是让我删除…

codeforces CF986C AND Graph 建圖 dfs

$ \rightarrow $ 戳我進CF原題 C. AND Graphtime limit per test: 4 secondsmemory limit per test: 256 megabytesinput: standard inputoutput: standard outputYou are given a set of size $ m $ with integer elements between $ 0 $ and $ 2^n-1 $ inclusive. Lets build…

HackRF 无线门铃信号录制与重放

本文内容、开发板及配件仅限用于学校或科研院所开展科研实验! 淘宝店铺名称:开源SDR实验室 HackRF链接:https://item.taobao.com/item.htm?spma1z10.1-c.w4004-13257850194.8.69503d888aIzVL&id526187854860 无线门铃链接:https://item.…

springboot项目和云服务器,以及域名的申请和使用(后续持续更新)

来记录一下做一个springboot项目以及上传至云服务器上过程新建并发布项目注册域名:域名备案发现的问题:在阿里云上面搞了一台个人服务器,当时是双十一打折买的,229好像。有了服务器当然要干点什么,于是做了个springboo…

抢火车票软件的教程

抢火车票软件的教程 1. 先去GitHub上下载源文件testerSunshine。 2. 下载并安装python3.7.4。(安装完成在cmd中输入 Python -V,如果出现是的是Python3.7.4,就说明安装成功) 3. 控制cmd进入下载的源码的文件夹下,输入 pip3 instal…

使用大麦网抢票工具的一些心得体会

源码上传已到百度网盘了 详情参考的是大麦抢票工具GitHub 【 重要,用前必看!!!】 浏览器准备步骤(根据自己浏览器的版本来下载对应的driver驱动) (这个准备工作一定要做) 我来解…

[中山市选]杀人游戏 (Tarjan缩点)

题目链接 Solution 可以考虑到如果知道环内一点的身份,如果凶手在其中就查出来了,同时不会有危险. 那么对警察造成威胁的就是那些身份不明且不能从其他点转移过来的点. 那么大部答案就是缩完点之后入度为 \(0\) 的联通块数量. 但是,会有特殊情况: 如图,我们就只要查 \(2\) 或者…

数据库为date型,而前端要显示String型,问题解决

关于数据库字段类型与前端显示类型不符问题解决:最近遇到这样的一个问题,有一个字段在数据库是date型的,但是产品需求我们在前端这样显示,如下图; 先把时间显示出来,最后一行显示上面所有记录的汇总。 而这…

codeforces 1039B Subway Pursuit【二分+随机】

题目:戳这里 题意:一个点在[1,n]以内,我们可以进行4500次查询,每次查询之后,该点会向左或向右移动0~k步,请在4500次查询以内找到该点。 解题思路:一边二分,一边随机。 交互题似乎有好…