File类:
    注意区分不同构造器的参数区别。
    路径分为相对路径和绝对路径,相对路径就是在当前路径(Module路径)继续指定路径,绝对路径就是完整的路径。

    如果使用@test进行测试,相对路径在当前Module下,如果使用main()方法测试,相对路径就是当前Project。

    Windows系统用“/”来切分路径,Unix用“\”。

    IO流:
    依据数据单位分为:字节流、字符流;
    ~流向~~:输出流、输入流;
    ~角色~~:节点流、处理流。

    image.png
    上方是父类,下方是子类,深色重点关注。后缀表示父类

    说明:
    1、字节流主要用于处理非文本文件,字符流主要用于处理文本文件;
    2、缓冲流会在运行内存中制造一个8K的缓冲区,这样做的原因是从内存中提取数据比从磁盘中效率高,可以提高读写速度;
    3、转换流提供字节流与字符流之间的转换(请注意编码表的使用);
    4、数据流用来读写基本数据类型。

    针对读入hello.txt文件的说明(使用FileReader()方法):
    1、read()的理解:返回读入的一个字符。如果达到文件末尾,返回-1;
    2、异常的处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally来处理(应注意流的关闭)。

    read()还有一个构造器叫read(char[] cbuf),可以读取指定数量的字符,用的时候注意字符长度的问题。

    针对写出hello.txt文件的说明(使用FileWriter()方法):
    1、输出操作,对应的File可以不存在。如果不存在,在输出的过程中,会自动创建此文件;
    2、使用FileWriter()的不同构造器可以实现覆盖原文件夹与否;
    3、其余与读入阶段类似。

    搞清楚输入流输出流的步骤以及异常抛出。

    对象流:

    1. package com.ObjectInputOutputStreamTest;
    2. import org.junit.Test;
    3. import java.io.*;
    4. public class ObjectInputOutputStreamTest {
    5. /*
    6. 序列化过程:将内存中的java对象保存到磁盘中或同故宫网络传输出去,使用
    7. ObjectOutputStream实现
    8. 序列化需要对象满足要求
    9. 要求如下:
    10. 1、实现Serializable接口(此接口为标识接口)
    11. 2、显式定义serialVersionUID
    12. 3、保证类内部的所有属性也必须可序列化
    13. 4、static、transient的成员变量不能被序列化
    14. */
    15. @Test
    16. public void testObjectOutputStream(){
    17. ObjectOutputStream oos = null;
    18. try {
    19. oos = new ObjectOutputStream(new FileOutputStream("object.dat"));
    20. oos.writeObject(new Person("樊睿",23));
    21. oos.flush();
    22. } catch (IOException e) {
    23. e.printStackTrace();
    24. } finally {
    25. if(oos != null){
    26. try {
    27. oos.close();
    28. } catch (IOException e) {
    29. e.printStackTrace();
    30. }
    31. }
    32. }
    33. }
    34. /*
    35. 反序列化
    36. */
    37. @Test
    38. public void testObjectInputStream(){
    39. ObjectInputStream ois = null;
    40. try {
    41. ois = new ObjectInputStream(new FileInputStream("object.dat"));
    42. Object obj = ois.readObject();
    43. Person p = (Person) obj;
    44. System.out.println(p);
    45. } catch (IOException e) {
    46. e.printStackTrace();
    47. } catch (ClassNotFoundException e) {
    48. e.printStackTrace();
    49. } finally {
    50. try {
    51. ois.close();
    52. } catch (IOException e) {
    53. e.printStackTrace();
    54. }
    55. }
    56. }
    57. }

    随机存取文件流RandomAccessFile
    1、直接继承于java.lang.object类,实现了DataInputDataOutput接口;
    2、RandomAccessFile既可以作为一个输入流,又可以作为一个输出流;
    3、RandomAccessFile作为输出流,写出到的文件如果不存在,会自动创建;如果写出到的文件存在,则会对原有文件内容进行覆盖(默认从头覆盖,可以通过改变指针来改变覆盖的位置),不会覆盖整个文件夹;

    NIO:用到再学。