定义

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令

路径:1.相对路径:"a.txt"  "abc.\\a.txt"

           2.绝对路径:"c:\\a.txt"  "c:\\abc\\a.txt"

构造方法

java 进入某个目录执行cmd命令_当前路径_02

为什么要创造file对象

为了调用file中的方法

1.File (String pathname)

java 进入某个目录执行cmd命令_当前路径_03

2.File (String parent,String child)

                       其为父路径                   其为子路径

什么是父路径和子路径?

java 进入某个目录执行cmd命令_学习_04

java 进入某个目录执行cmd命令_学习_05

此方法为将父路径和子路径进行拼接

3.File (File parent,String child)

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_06

将一个file表示的路径和String表示的路径进行拼接

总结

java 进入某个目录执行cmd命令_当前路径_07

成员方法

java 进入某个目录执行cmd命令_学习_08

判断

isdirectory isfile exists

java 进入某个目录执行cmd命令_文件名_09

java 进入某个目录执行cmd命令_java_10

1.对一个文件的路径进行判断

a.txt是文件

输出 false true true

2.对一个文件夹的路径进行判断

其中bbb是文件夹

java 进入某个目录执行cmd命令_java_11

输出 true false true

3.对一个不存在的路径进行判断

c.txt不存在

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_12

返回 false false false

获取

length getabsolutepath getpath getname

java 进入某个目录执行cmd命令_学习_13

1.length(返回文件的大小 字节数量)

aaa.txt是文件

java 进入某个目录执行cmd命令_当前路径_14

bbb是文件夹

java 进入某个目录执行cmd命令_java_15

java 进入某个目录执行cmd命令_java_16

但输出结果是 0

为什么

细节:1. length方法只能获取文件的大小

               如果单位是M或G的话 可以不断的除以1024

               len/1024 -> KB

               1024/1024 ->MB

这个方法无法获取文件夹的大小

              如果想要获取一个文件夹的大小 该怎么办

              需要把这个文件夹中的所有文件大小都累加在一起

2.getAbsolutePath(获取文件的绝对路径)

java 进入某个目录执行cmd命令_学习_17

java 进入某个目录执行cmd命令_学习_18

java 进入某个目录执行cmd命令_学习_19

3.getPath(返回定义文件时使用的路径)

创建对象时括号里写的是什么 返回的就是什么

java 进入某个目录执行cmd命令_java_20

4.getName(获取名字)

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_21

文件:返回文件名和文件后缀

文件夹:返回文件夹名

5.lastModified(返回文件的最后修改时间 时间毫秒值)

java 进入某个目录执行cmd命令_当前路径_22

创建

createnewfile mkdir mkdirs

java 进入某个目录执行cmd命令_当前路径_23

1.creatNewFile(创建一个新的空的文件)

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_24

出现编译时错误  直接alt+回车

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_25

选择第一个将异常进行抛出

java 进入某个目录执行cmd命令_当前路径_26

运行后

java 进入某个目录执行cmd命令_文件名_27

变为

java 进入某个目录执行cmd命令_当前路径_28

如果aaa文件夹中,c.txt文件已经存在 那么再运行会怎么样

java 进入某个目录执行cmd命令_java_29

结果是返回false 表示此时创建失败

java 进入某个目录执行cmd命令_文件名_30

如果所创建文件的父级路径不存在 那么方法报错

java 进入某个目录执行cmd命令_学习_31

java 进入某个目录执行cmd命令_当前路径_32

java 进入某个目录执行cmd命令_学习_33

如果在aaa中创建ddd文件夹

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_34

返回true 创建成功

java 进入某个目录执行cmd命令_学习_35

创建了一个没有后缀的文件

java 进入某个目录执行cmd命令_当前路径_36

注意创建的一定是文件

2.mkdir(创建单极文件夹(目录))

java 进入某个目录执行cmd命令_学习_37

为什么是false

虽然不存在名称为ddd的文件夹

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_38

java 进入某个目录执行cmd命令_文件名_39

但存在与其路径相同的文件 路径一定是唯一的

java 进入某个目录执行cmd命令_文件名_40

输出false

只能创建单级不能创建多级

细节

java 进入某个目录执行cmd命令_当前路径_41

3.madirs(创建多级文件夹)

这个用的多 因为此方法也可以创建单极文件夹

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_42

在aaa大类中创建aaa文件夹 在aaa文件夹中创建bbb文件夹 在bbb中创建ccc

java 进入某个目录执行cmd命令_文件名_43

删除

delete

注意:只能删除空文件夹

删除文件

java 进入某个目录执行cmd命令_文件名_44

删除的文件不会进入回收站

删除文件夹

java 进入某个目录执行cmd命令_java_45

如果文件夹里没有东西 那么直接delete就可以删除成功 不会进入回收站

如果文件夹中有东西 那么返回false 删除失败 只能将文件夹里的东西全部删除后再删除文件本身

java 进入某个目录执行cmd命令_文件名_46

获取并遍历

listfiles

1.listFiles(获取当前该路径下所有内容) 最重要

java 进入某个目录执行cmd命令_java_47

java 进入某个目录执行cmd命令_java_48

java 进入某个目录执行cmd命令_学习_49

java 进入某个目录执行cmd命令_学习_50

输出

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_51

细节

java 进入某个目录执行cmd命令_文件名_52

java 进入某个目录执行cmd命令_文件名_53

只需要掌握listFiles的空参构造就可以了

listroots(获取系统中所有的盘符) list listfiles

1.listroots 获取系统中所有的盘符

java 进入某个目录执行cmd命令_java_54

输出

java 进入某个目录执行cmd命令_文件名_55

2.list() 获取当前该路径下所有内容( 仅仅能获得名字)

java 进入某个目录执行cmd命令_当前路径_56

java 进入某个目录执行cmd命令_文件名_57

输出

java 进入某个目录执行cmd命令_java_58

3.list(FilenameFilter filter)利用文件名过滤器获取当前路径下所有内容

此为函数式接口 可以写成匿名内部和lambda表达式

java 进入某个目录执行cmd命令_java_59

listFiles版

java 进入某个目录执行cmd命令_java_60

4.listfiles (FileFilter filter) 利用文件名过滤器获取当前路径下所有内容 返回值是file类型

java 进入某个目录执行cmd命令_文件名_61

5.listfiles (FilenameFilter filter) 利用文件名过滤器获取当前路径下所有内容

java 进入某个目录执行cmd命令_java_62

这里的File dir String name合起来就是上面的File pathname

如何实现上面的需求:

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_63

综合练习

练习1

java 进入某个目录执行cmd命令_学习_64

java 进入某个目录执行cmd命令_学习_65

运行后

java 进入某个目录执行cmd命令_当前路径_66

成功创建aaa

练习2

java 进入某个目录执行cmd命令_当前路径_67

java 进入某个目录执行cmd命令_java_68

其中bbb文件夹中有以avi结尾的电影

java 进入某个目录执行cmd命令_当前路径_69

定义一个判断结尾是否是.avi的方法

java 进入某个目录执行cmd命令_java_70

回到测试类中

返回值为false

java 进入某个目录执行cmd命令_文件名_71

java 进入某个目录执行cmd命令_文件名_72

返回true

练习3

java 进入某个目录执行cmd命令_java_73

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_74

不能用上述方法的原因 : 每个文件夹包含的东西不统一

解题思路:

把四个文件夹拆开 将a文件夹拆成许多小文件夹

java 进入某个目录执行cmd命令_文件名_75

所以使用递归

java 进入某个目录执行cmd命令_学习_76

java 进入某个目录执行cmd命令_java_77

但是运行结果会报错

java 进入某个目录执行cmd命令_文件名_78

第28行为空指针异常,意味着以下两个变量其中有一个有可能为空

java 进入某个目录执行cmd命令_文件名_79

File file 表示src中的每一个文件或者文件夹 不可能为空

所以是后面的files数组可能为空

为什么

因为listFiles方法的细节

如果里面的文件夹是需要有权限才可以进入的,那么此方法的返回值为null

所以要对files做一个非空判断

java 进入某个目录执行cmd命令_学习_80

这样就搞定c盘了 那其他盘怎么办

再定义一个对本地所有盘符进行遍历的方法就好了

java 进入某个目录执行cmd命令_学习_81

在测试类中直接调用空参的findAVI方法

java 进入某个目录执行cmd命令_学习_82

练习4

java 进入某个目录执行cmd命令_学习_83

如果我们要删除一个有内容的文件夹

1.先删除文件夹里所有的内容

2.再删除文件夹本身

不知道文件夹里的文件夹有多少级怎么办呢

和练习三一样

还是使用递归的思想

java 进入某个目录执行cmd命令_文件名_84

目的是删除src文件夹

java 进入某个目录执行cmd命令_文件名_85

java 进入某个目录执行cmd命令_java_86

过程:

先进入循环删除src中的 a.txt 和 b.txt 因为aaa是文件夹所以再次调用delete方法

删除aaa文件夹中的 aa.txt 因为有空文件夹所以再次调用delete方法

空文件夹.listFiles返回的是一个长度为0的数组 此数组不能遍历,循环体进不去,所以删除空文件夹

java 进入某个目录执行cmd命令_学习_87

练习5

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_88

定义一个可以统计文件夹总大小的方法

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_89

练习6

java 进入某个目录执行cmd命令_当前路径_90

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_91

定义方法

java 进入某个目录执行cmd命令_当前路径_92

因为不确定有几个后缀名,所以用map进行统计

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_93

注意后面将返回值改成了hashmap

java 进入某个目录执行cmd命令_当前路径_94

java 进入某个目录执行cmd命令_java 进入某个目录执行cmd命令_95

在循环外返回hm

java 进入某个目录执行cmd命令_当前路径_96