复习笔记7-Java高级 IO流

## 1.Junit单元测试框架（测试方法）
#### ①为需要测试的业务类，定义对应的测试类，并为每个业务方法，编写对应的测试方法（必须：公共 无参 无返回值）
#### ②测试方法上必须声明@Test注解，然后在测试方法中，编写代码调用被测试的业务方法进行测试
#### ③如果测试通过是绿色，测试失败是红色
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/21fc0827-e3be-a0a5-62cf-d08a2460d564.png)
## 2.Junit框架的常见注解
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/5e799df0-9448-972b-36d5-1f99275a7b9b.png)
## 3.注解
作用：让其他程序根据注解信息来决定怎么执行该程序
注意：注解可以用在类上，构造器上，方法上，成员变量上，参数上，等位置处
## 4.File
#### ①创建对象
File对象既可以代表文件，也可以代表文件夹
File封装的对象仅仅是一个路径名，这个路径可以是存在的，也允许是不存在的
#### ②方法：判断文件类型，获取文件信息
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/a96f9651-1ef2-0b0c-498a-3a8f6d926bec.png)
```java
        // 1.创建文件对象，指代某个文件
        File f1 = new File("C:\\Users\\liang\\OneDrive\\デスクトップ\\新建 文本文档.txt");

        // 2.判断当前文件对象，对应的文件路径是否存在，存在返回true
        System.out.println(f1.exists());// true

        // 3.判断当前文件对象指代的是否是文件，是文件返回true,反之
        System.out.println(f1.isFile()); // true

        // 4.判断当前文件对象指代的是否是文件夹，是文件夹返回true,反之
        System.out.println(f1.isDirectory());// false

        // 5.获取文件的名称 包含后缀
        System.out.println(f1.getName());// 新建 文本文档.txt

        // 6.获取文件的大小，返回字节个数
        System.out.println(f1.length());// 540

        // 7.获取文件的最后修改时间
        System.out.println(f1.lastModified());// 1722664222184

        // 8.获取创建文件对象时，使用的路径
        File f2 = new File("file-io-app\\src\\itheima.txt");
        System.out.println(f2.getPath());// file-io-app\src\itheima.txt

        // 9.获取绝对路径
        File f3 = new File("file-io-app\\src\\itheima.txt");
        System.out.println(f3.getAbsolutePath());// C:\java-learning\java-note\file-io-app\src\itheima.txt
```
#### ③方法：创建文件，删除文件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/14408946-6a80-2b08-2bd4-a65005a91725.png)
```java
        // 1.创建一个新文件（文件内容为空），创建成功返回true,反之
        File f1 = new File("C:/resource/itheima2.txt");
        System.out.println(f1.createNewFile());

        // 2.用于创建文件夹，注意，只能创建一级文件夹
        File f2 = new File("C:/resource/aaa");
        System.out.println(f2.mkdir());

        // 3.用于创建文件夹，注意，可以创建多级文件夹
        File f3 = new File("C:/resource/bbb/ccc/ddd");
        System.out.println(f3.mkdirs());

        // 4.删除文件或者空文件，注意，不能删除非空文件
        System.out.println(f1.delete());
        System.out.println(f2.delete());
```
#### ④方法：遍历文件夹
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/498b115c-3df0-4886-678a-207efc1ba962.png)
```java
        // 1.获取当前目录下所有的“一级文件名称”到一个字符串数组中去返回
        File f1 = new File("C:\\code");
        String[] names = f1.list();
        for (String name : names) {
            System.out.println(name);
            // javasepro
            //得奖的是
            //汪苏泷
            //雨天
        }

        // 2.重点：获取当前目录下所有的“一级文件对象”到一个文件对象数组中去返回
        File[] files = f1.listFiles();
        for (File file : files) {
            System.out.println(file.getAbsolutePath());
            // C:\code\javasepro
            //C:\code\得奖的是
            //C:\code\汪苏泷
            //C:\code\雨天
```
## 5.输入流(input)：负责把数据读到程序中去
⭐方法：read
#### ①字节输入流（FileInputStream）
```java
        // 1.创建文件字节输入流管道，与源文件接通
        InputStream is = new FileInputStream(("file-io-app\\src\\itheima02.txt"));

        // 2.开始读取文件中的字节数据，每次读取多个字节
        // 每次读取多个字节到字节数组中去，返回读取的字节数量，读取完毕会返回-1
        byte[] buffer = new byte[3];
        int len;// 记住每次读取了多少个字节
        while ((len = is.read(buffer)) != -1){
            // 注意：读取多少 倒出多少
            String rs = new String(buffer,0,len);
            System.out.print(rs);// abc66
        }

        is.close();// 关闭流 
```
#### ②字符输入流（FileReader）
```java
        try(
            // 1.创建一个文件字符输入流管道与源文件接通
             Reader fr = new FileReader("io-app2\\src\\itheima01.txt");
                ) {

            // 2.每次读取多个字符
            char[] buffer = new char[3];
            int len;// 记住每次读取了多少个字符
            while ((len = fr.read(buffer)) != -1){
                // 读取多少 倒出多少
                System.out.print(new String(buffer, 0, len));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
```
## 6.输出流(output)：负责写数据出去
⭐方法：write
#### ①字节输出流（FileOutputStream）
```java
        // 1.创建文件字节输入流管道，与源文件接通
        OutputStream os =
                new FileOutputStream("file-io-app\\src\\itheima04out.txt",true);
        // 2.开始写字节数据出去了
       os.write(97);// 97就是一个字节 代表a
       os.write('b');// 'b'也是一个字节

        // getBytes方法将字符串 "我爱你中国abc" 转为字节数组
        byte[] bytes = "我爱你中国abc".getBytes();
        os.write(bytes);

        // 将字节数组的前 15 个字节写入文件
        os.write(bytes,0,15);

        // 换行符
       os.write("\r\n".getBytes());

       os.close();// 关闭流
```
#### ②字符输出流（FileWriter）
```java
        try(
            //0.创建一个文件字符输出流管道与源文件接通
            Writer fw = new FileWriter("io-app2\\src\\itheima02out.txt",true);
                ) {
            // 1.写一个字符出去
            fw.write('a');
            fw.write(97);
            fw.write('磊');// 写一个字符出去
            fw.write("\r\n");// 换行

            // 2.写一个字符串出去
            fw.write("我爱你中国abc");

            // 3.写字符串的一部分出去
            fw.write("我爱你中国abc",0,5);

            // 4.写一个字符数组出去
            char[] buffer = {'黑','马','a','b','c'};
            fw.write(buffer);

            // 5.写字符数组的一部分出去
            fw.write(buffer,0,2);

        } catch (Exception e) {
            e.printStackTrace();
        }
```
## 7.缓冲流
对原始流进行包装，以提高原始流读写数据的性能
#### ①.字节缓冲输入流/输出流（BufferedInputStream/BufferedOutputStream）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/3f0b1a55-48ce-69c8-9978-116e02d63a31.png)
#### ②.字符缓冲输入流（BufferedReader）
⭐按照行读取字符：readLine,读取一行数据返回，如果没有数据可读了，会返回null
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/020a0ea3-fa35-1f28-a4a3-d3536224c1fb.png)
#### ③.字符缓冲输出流（BufferedWriter）
⭐换行：newLine
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/0e1a1d19-fc6b-7b57-8253-aeba9cdc4057.png)
## 8.释放资源的方式 
#### ①try-catch-finally
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/c58ba7d2-08c3-2d2e-7847-69f2d56a3bc5.png)
#### ②try-with-resource
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/c26bc3b2-f1d5-09ed-4207-397fb14a7655.png)