文件操作和IO - 2
目录
Java 中操作文件
File 概述
属性
构造方法
方法
getParent getName getPath getAbsolutePath getCanonicalPath
exists isFile isDirectory createNewFile
delete deleteOnExit
list listFiles
mkdir mkdirs
完!
Java 中操作文件
Java 对于文件操作的 API
1. 针对文件系统的操作。包括但不限于:创建文件,删除文件,重命名文件,列出目录内容...
2. 针对文件内容的操作。读文件 / 写文件
Java 中针对文件系统的操作,使用 File 类来进行操作。这个类所在的包叫做 java.io
i:即 input(输入)o:即 output(输出)
如何记忆数据从 硬盘 道 CPU 叫做输入,还是 CPU 到硬盘的过程叫做输入呢???
有句名言叫:“屁股决定脑袋~~~”坐在那个位置,我们的想法就是怎么样的。对于计算机来说,CPU 是最关键的部分,我们就可以认为,我们的屁股是坐在 CPU 上来看待问题的。也就是说,硬盘 到 CPU 叫做输入~~
File 概述
属性
属性是路径之间的分隔符,会根据系统自动进行调整。实际开发中更建议直接使用 /
构造方法
大多数情况下,我们使用第二种构造方法。
构造一个 File 对象,需要指定路径。此处的路径可以是绝对路径也可以是相对路径(这个路径也可以是不存在的路径)
如果写作相对路径。
1. 如果是直接在 idea 中运行程序,则此时工作目录就是我们项目的所在目录。
2. 如果是把代码打包成一个单独的 jar 包来执行,此时工作目录就是 jar 包所在的目录
如果是其他两种方式的话,例如 C:\Users\1\test.txt ==》 对于这个文件来说,parent 就是 C:Users\1
方法
getParent getName getPath getAbsolutePath getCanonicalPath
示例代码:
当我们在 C 盘下 Users 的 laideji 中有一个 test.txt 文件,使用绝对路径当作参数传入 File 中
打印结果如下:
getParent() 会得到父目录的路径,并且 getPath() getAbsolutePath() 和 getCanonicalPath() 的结果都是相同的
当我们注释掉绝对路径,而采用相对路径的时候:
打印结果如下:
研究打印结果发现,哇哦,有好多不相同的地方~~~
首先,这里的第一个方法 getParent() 方法仅仅打印了一个 . 来表示父目录
然后,getPath() 方法中的结果就是 File 构造方法中的参数
其次,getAbsolutePath() 方法中,和下面的 getCanoicalPath 方法对比,多了一个 . 这个 . 表示的是当前的路径,此处是先一层一层找到了 J2025_3_24 这一级目录,然后再找 . 此时 . 就是 J2025_3_24, 相当于是原地踏步了一下~ 而 getCanoicalPath 则是针对上面的绝对路径简化整理之后的效果了,没有了那个点~~~
exists isFile isDirectory createNewFile
当我们在当前项目中,创建一个 test.txt 之后:
如果有代码:
打印结果如下:
第一个 ture 表示:File对象描述的文件真实存在,第二个 ture 表示的是 File对象描述的是文件,接下来的 false 表示的是 File对象描述的不是目录,最后 ret = false 表示的是,根据 File对象,没有成功创建一个空的文件,因为我们已经自己手动的在项目下面创建了 test.txt
delete deleteOnExit
如果我们想要删除文件:
运行后,项目下的 test.txt 就会被删除,同时 ret 为 true。 如果再运行一次,因为项目中已经没有了该文件,ret 就会打印 false
还有一种删除的方式是:退出时再删除,deleteOnExit 方法
代码如下:
刚开始程序运行的时候,项目下的 test.txt 并不会被删除,当 sleep 五秒之后,程序结束的时候,才会删除 test.txt 文件(有时候可能会出现,程序已经结束退出了,但是文件仍然能看到的情况,这个情况有可能是 IDEA 的延迟,文件其实已经没有了,但是 IDEA 文件列表并没有及时的刷新,我们手动 F5 刷新一下即可)
退出后再删除,这样的文件,也被称为“临时文件”。就比如 docx 就会有一个临时文件。我们正在编辑的内容,都是再内存中的,如果我们的电脑(台式机)突然断电,内存数据就没有了。因此想 word 这样的程序,会将我们正在编辑的内容写入到这个临时文件中,如果突然断电,临时文件仍然会存在,借助这个临时文件,就可以恢复之前并没有保存的数据~~~
比如,我们打开这个 Hello wowrld 的 docx 文件,然后再在这个文件的路径下查看,就会发现有一个隐藏的项目 docx 文件,这个文件就是临时文件~~~
list listFiles
返回 File对象目录下的所有文件名:
打印结果如下:
如果要以 File 对象表示的话:
打印结果如下:这样打印的就是 file 对象目录下的所有文件名的相对地址~
mkdir mkdirs
创建 File 对象代表的目录:
代码如下:
运行完毕后,如果当先项目下没有名为 aaa 的目录,则会打印 ture,并创建一个名为 aaa 的目录
创建 File 对象代表的目录,如果有必要,会创建中间目录
代码示例:
上面我们已经创建了名为 aaa 的目录,要想在 aaa 下面创建一个 bbb 同时再在 bbb 下面创建 ccc,就可以使用 mkdirs 方法~~~
renameTo
进行文件改名,也可以是作为我们平时的剪切,粘贴操作~~~
上述示例代码,将该项目下的 test.txt 文件路径转移到了该项目下 aaa 目录下,更名为 test2.txt