【javaEE初阶】文件操作和IO

今天不学习,明天变垃圾!

本文主要内容:字节流、字符流的输入输出,文件的基本操作及文件内容读写操作(有练习题!)。

1. 文件

2. 路径

(但是在我们自己写代码的时候,建议使用斜杠/表示路径)
(ps:注意区分内存和外存)

2)相对路径:(从当前目录开始。)首先得有一个”基准路径”,也叫”工作路径”。相对路径就是以基准路径为起点,往下继续咋走才能到达目标的路径表示方式。
在相对路径中 使用.表示”当前目录”
如:D:\Navicat\Navicat for MySQL\navicat.exe 是绝对路径,而如果基准路径是D:\Navicat,那么相对路径就是:.\Navicat for MySQL\navicat.exe

  • 相对路径中使用 . . 返回上级目录( . . 表示当前目录的上级路径)

如:当前的工作路径是:D:/program/Wechat/Bin,所要找的文件的绝对路径是D:/program/qq/Bin/QQ.exe,则使用相对路径该怎么找呢?
. ./ ->返回当前路径D:/program/Wechat/Bin的上一级路径D:/program/Wechat ;此时还是不行,再进行
. ./ -> 返回当前路径D:/program/Wechat的上一级路径D:/program
此时已经可以开始继续向下查找了,所以最后的相对路径就是: . ./. ./qq/Bin/QQ.exe

谈到相对路径,务必要明确工作目录/基准目录是啥。

Windows下是无法通过. .来到”此电脑”这一级的,也就是 盘之间没法使用. .切换;但是Linux下没有盘符的概念,也就不涉及这个问题。 Windows上盘之间的切换是通过直接输入盘符来改变的,如D:

3. 补充

1.File类

  • 以上的方法/操作,主要都是在操作” 文件系统“,而不是针对文件内容的操作。
    (”文件系统”是操作系统中管理文件的核心功能。)
  • 方法/操作就是如:新增文件、删除文件、新增目录、列出目录内容、重命名、获取路径…
  1. IOException:IO中常见的异常。
  2. 注意字符串数组打印方法:Arrays.toString(字符串数组名)
  3. 文件类型是啥?
    ——准确来说,文件类型是与文件内部的数据格式相关联的, 与文件的后缀名无关
  4. 针对文件内容操作,涉及到的关键操作是:读文件和写文件。
  5. 注:删除目录也用delete

标准库中给这些父类提供了各种子类的实现来适应不同场景下的读写
子类举例:
① InputStream的子类:FileInputStream
② OutputStream的子类 FileOutputStream
③ Reader的子类:FileReader
④ Writer的子类:FileWriter

1. InputStream

2. OutputStream

3. 字符流文件的操作

(ps. 建议使用hasNext与next,而不是hasNextLine与nextLine,后面这两个方法有很多坑)

如何确保文件一定执行到close呢?
① 使用try…finally {file.close(); }
② 使用 try with resources:把要关闭的对象写到try()中(也就是说直接在()中 new实例对象!),当try结束后就会 自动调用到对应对象的close方法!而且支持一个()中放多个对象, 多个对象的创建之间使用分号; 进行分割就ok了。

① 先让用户输入:要扫描的路径+你要查找的词/指定字符
② 遍历目录,找到名字匹配的文件遍历目录需要借助核心方法 listFiles():能够把当前目录里的文件和子目录列举出来,但是这个方法 只能列出一层,没法列出子目录中的内容。
解决方法:遍历listFiles的结果,针对每个元素进行判定,看它是一个普通文件还是一个目录,如果是普通文件就直接判定是否包含了要查的关键词,如果是目录就 递归的调用listFiles。
(目录结构本质上是”树”,树的遍历使用递归) ③ 询问用户是否删除
注意: String类型比较相等如果使用==,则会一直false,因为String是引用类型,会new对象,比较的是地址!!
引用类型比较大小使用equals!!

把第一个文件打开,将里面的内容 逐个字节的读取出来写到第二个文件中即可。
“逐个字节”就是要使用字节流来进行操作,字节流是可以用来拷贝文本文件的。
① 输入源文件、目标文件 + 判断是否存在该文件(路径是否正确)
② 源文件按 字节读出InputStream,目标文件按字节写入OutStream
try with resources的使用,可以在try之后自动关闭文件(此时针对的是两个对象)

① 输入扫描的路径和要查询的关键词 + 判断文件是否存在
② 递归的扫描目录
③查看是否包含关键字:
检查文件名中是否包含关键字;
检查内容中是否包含关键字(读取内容InputStream:同样使用try with source 避免忘记close文件—打开文件之后 使用Scanner进行读文件:按行读取
(注意:StringBuilder的拼接+按行读取+使用indexOf判定关键词是否存在!)

缓冲区buffer 和缓存cache是不一样的。

Original: https://blog.csdn.net/weixin_54150521/article/details/127810986
Author: ‘Dream_
Title: 【javaEE初阶】文件操作和IO

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/652551/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球