一.认识文件狭义的文件它是存储在外部存储器中一个独立的数据集合它还包含一些元信息如文件大小文件类型等。广义的文件操作系统内核提供的可以被以标准文件操作接口如打开、读取、写入、关闭进行访问的“对象”。二.文件目录和路径目录一种树形结构操作系统是通过目录文件夹来组织和管理文件的路径从根目录开始直到文件把中间经过那些子目录记录下来就构成了路径。在大多数操作系统中都是通过/斜杠来分割子目录和父目录的但windows操作系统是例外(反斜杆) \和/斜杆都可以分割但默认为反斜杠一般使用斜杆/来分割因为使用反斜杠\时要使用到转义字符从众多文件中找到需要的文件通过路径找到而路径又分为两种分别为相对路径和绝对路径1.绝对路径举例C:\Program Files (x86)2.相对路径相对路径都有一个基准路径通过.来表示当前所在的目录位置(即基准路基)通过..来表示当前路基的上一层路径即基准路径的父目录。举例基准路径为C:\text\day1./data.txt 表示为C盘text目录下day1目录下的data.txt文件。./../data.txt表示为表示为C盘text目录下的data.txt文件。三.文件种类所有文件都是二进制的从开发者的角度文件可以分为文本文件和二进制文件文本文件文件里都是由二进制组成的,但是有些文件中的二进制数据(编码格式)可以通过ASCILL等各种码表映射出一些字符通过这些字符组成后形成一些有意义的信息时就叫做文本文件二进制文件和文本文件相反通过映射关系后形成无意义的信息时就叫做二进制文件。四.Java中操作文件Java标准库提供了一系列类操作文件可以分为文件系统操作创建、重命名和删除文件目录等和文件内容操作如针对一个文件的读和写。1.Flie类--文件系统操作1)构造方法2普通方法mkdir、mkdirs和creatNewFile方法区别2.数据流 --文件类容操作Java标准库提供了一组类来表示流流可以分为字节流和字符流。1.字节流读写文件以字节为单位是针对二进制文件使用的1InputStream 输入流从文件里读取数据2OutputStream 输出流 往文件里写数据2.字符流读写文件是以字符为单位的是针对文本文件使用的1Reader 输入流从文件里读取数据2Writer 输出流往文件里写入数据3.Scanner类和PrintWriter类1Scanner类2PrintWriter类除此之外还可以传入字符流注意以上写入数据时都是都没有手动flash缓存区不然都写在缓存区中但我们代码都加了try{}代码块会自动close我们创建的字符流或字节流在关闭的过程中会帮我们flash(),但强烈建议手动flash。4.缓冲区缓冲区通常是一段内存空间用来提高程序的效率。如果没有缓冲区读/写入多个数据时得读/写多次效率比较低因此可以设立缓冲区写入数据时不会立马写入先放入到缓冲区等满时一次性写入。读取数据时不是一个一个读而是读取一波数据放入到缓冲区再慢慢解析。设立缓冲区的方法1手动创建缓冲区byte[]2Java标准提供了“缓冲区流” BufferedStream把InputStream等流创造的实例传入该类即可五.练习1.扫描指定⽬录并找到名称中包含指定字符的所有普通⽂件不包含⽬录并且后续询问⽤⼾是否 要删除该⽂件2.进行普通文件的复制3.扫描指定⽬录并找到名称或者内容中包含指定字符的所有普通⽂件不包含⽬录public class Demo3 { public static void main(String[] args) { System.out.println(请输入要查询的目录); Scanner scanner new Scanner(System.in); String pathRoot scanner.next(); File fileRoot new File(pathRoot); if (!fileRoot.isDirectory()) { System.out.println(输入的路径不是目录); } else { System.out.println(请输入要查找的关键字); String keyword scanner.next(); scanDir(fileRoot, keyword); } } private static void scanDir(File fileRoot, String keyword) { File[] files fileRoot.listFiles(); if (files null) { return; } //用来存放文件内容 StringBuilder st new StringBuilder(); //遍历目录 for (File file : files) { if (file.isFile()) { //判断文件名是否包含关键字 if (file.getName().contains(keyword)) { System.out.println(文件名包含关键字file.getAbsolutePath()); }else { //读取文件内容判断是否包含关键字 try(InputStream inputStream new FileInputStream(file)) { while (true){ byte[] bytes new byte[1024]; int ch inputStream.read(bytes); if (ch -1) { break; } st.append(new String(bytes)); } } catch (IOException e) { throw new RuntimeException(e); } if(st.indexOf(keyword)!-1){ System.out.println(文件内容包含关键字file.getAbsolutePath()); } } } else { scanDir(file, keyword); } } } }