1.File类
    静态成员变量:
    File.pathSeparator表示路径分隔符(windows ;分号 linux :冒号)
    File.separator 表示文件名分隔符(windows \ 反斜杠 linux / 正斜杠)
    路径:
    绝对路径:一个完整的路径
    相对路径:对于当前使用项目的根目录,路径可以简化书写,也就是不用写该路径的根目录
    书写:注意写路径的时候\需要写两个\因为一个\表达的是转义符
    构造方法:

    public File(String pathname) 通过路径名字符串创建新的 File实例。

    注意:路径可以存在,也可以不存在;可以使用绝对路径,也可以使用相对路径

    public File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例

    注意:把路径分成两个部分,使用灵活,容易更改

    public File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例

    注意:父路径是File类型,可以使用File类的方法对路径进行操作再创建对象。
    常用方法:
    获取功能

    public String getAbsolutePath() 返回此File的绝对路径名字符串
    public String getPath() 返回File的路径名字符串 (区分相对绝对)
    public String getName() 返回由此File表示的文件或目录的名称 (构造方法传递路径的结尾部分)
    public long length() 返回由此File表示的文件的大小(字节为单位)(文件夹返回0)

    判断功能:

    public boolean exists() 此File表示的文件或目录是否实际存在。
    public boolean isDirectory() 此File表示的是否为目录。
    public boolean isFile() 此File表示的是否为文件。

    创建删除功能:

    public boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
    public boolean delete() 删除由此File表示的文件或目录。
    public boolean mkdir() 创建由此File表示的目录。
    public boolean mkdirs() 创建由此File表示的目录,包括任何必需但不存在的父目录。

    遍历功能:路径必须是文件夹,否则会返回空指针异常

    public String[] list() 返回一个String数组,表示该File目录中的所有子文件或目录。
    public File[] listFiles() 返回一个File数组,表示该File目录中的所有的子文件或目录。

    递归实现打印多级目录:

    1. public static void scan(Filefile){
    2. File[] files = file.listFiles();
    3. for(Filef:files){
    4. if(f.isDirectory())
    5. scan(f);
    6. else
    7. System.out.println(f.toString());
    8. }
    9. }

    文件过滤器:FileFilter
    通过重写File Filter中的方法可以在使用listFiles方法的时候进行过滤
    2.IO流:

    输入流 输出流
    字节流 字节输入流 InputStream 字节输出流 OutputStream
    字符流 字符输入流 Reader 字符输出流 Writer

    字节输出流【OutputStream】

    public void close() 关闭此输出流并释放与此流相关联的任何系统资源。
    public void flush() 刷新此输出流并强制任何缓冲的输出字节被写出。
    public void write(byte[] b) 每次可以写出数组中的数据
    public void write(byte[] b, int off, int len) 每次写出从off索引开始,len个字节
    public abstract void write(int b) 每次可以写出一个字节数据

    FileOutputStream类:
    成员方法:

    • public FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件
    • public FileOutputStream(String name):创建文件输出流以指定的名称写入文件
    • public FileOutputStream(File file, boolean append):创建文件输出流以写入由指定的 File对象表示的文件,append为true,则表示追加数据
    • public FileOutputStream(String name, boolean append):创建文件输出流以指定的名称写入文件,append为true,则表示追加数据

    写入数据:
    注:可以通过String类的getBytes()方法来快速写入字符串
    字节输入流【InputStream】

    public void close() 关闭此输入流并释放与此流相关联的任何系统资源
    public abstract int read() 从输入流读取数据的下一个字节
    public int read(byte[] b) 从输入流中读取一些字节数,并将它们存储到字节数组 b中

    FileInputStream类:

    • FileInputStream(File file): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
    • FileInputStream(String name): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
      • 当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileNotFoundException

    方法:
    read方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾,返回-1
    read(byte[] b),每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读取到末尾时,返回-1
    注意:两种方式的读取都是读取完固定位数之后将光标后移,在读取到-1的时候停下
    字符输入流【Reader】

    public void close() 关闭此流并释放与此流相关联的任何系统资源
    public int read() 从输入流读取一个字符
    public int read(char[] cbuf) 从输入流中读取一些字符,并将它们存储到字符数组cbuf中

    FileReader类
    构造方法类似字节输出流
    成员方法:
    read方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1
    read(char[] cbuf),每次读取b的长度个字符到数组中,返回读取到的有效字符个数,读取到末尾时,返回-1
    字符输出流【Writer】

    void write(int c) 写入单个字符。
    void write(char[] cbuf) 写入字符数组。
    abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
    void write(String str) 写入字符串。
    void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
    void flush() 刷新该流的缓冲。
    void close() 关闭此流,但要先刷新它。

    FileWriter类
    构造方法类似字节输入流
    成员方法:
    write(int b) 方法,每次可以写出一个字符数据
    write(char[] cbuf)write(char[] cbuf, int off, int len) ,每次可以写出字符数组中的数据
    write(String str)write(String str, int off, int len) ,每次可以写出字符串中的数据,更为方便
    注意:写入数据的时候,write方法是先写入到内存缓冲区,将字符转换为字节,然后需要通过使用flush方法把内存缓冲区中的数据刷新到文件中
    3.属性集
    Properties类
    构造方法:
    public Properties() :创建一个空的属性列表
    成员方法

    • public Object setProperty(String key, String value) : 保存一对属性。
    • public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。
    • public Set<String> stringPropertyNames() :所有键的名称的集合。
    • public void load(InputStream inStream): 从字节输入流中读取键值对,加载文本中的数据。

    4.缓冲流
    字节缓冲流
    构造方法

    • public BufferedInputStream(InputStream in) :创建一个 新的缓冲输入流。
    • public BufferedOutputStream(OutputStream out): 创建一个新的缓冲输出流。

    字符缓冲流
    构造方法

    • public BufferedReader(Reader in) :创建一个 新的缓冲输入流。
    • public BufferedWriter(Writer out): 创建一个新的缓冲输出流。

    特有方法:

    • BufferedReader:public String readLine(): 读一行文字。
    • BufferedWriter:public void newLine(): 写一行行分隔符,由系统属性定义符号。

    5.转换流
    InputStreamReader类
    构造方法:

    • InputStreamReader(InputStream in): 创建一个使用默认字符集的字符流。
    • InputStreamReader(InputStream in, String charsetName): 创建一个指定字符集的字符流。

    OutputStreamWriter类
    构造方法:

    • OutputStreamWriter(OutputStream in): 创建一个使用默认字符集的字符流。
    • OutputStreamWriter(OutputStream in, String charsetName): 创建一个指定字符集的字符流。

    6.序列化
    ObjectOutputStream类
    构造方法:
    public ObjectOutputStream(OutputStream out): 创建一个指定OutputStream的ObjectOutputStream
    序列化满足条件:

    • 该类必须实现java.io.Serializable 接口,Serializable 是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出NotSerializableException
    • 该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用transient 关键字修饰。

    成员方法:
    public final void writeObject (Object obj) : 将指定的对象写出。
    ObjectInputSteam类:ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。
    构造方法:
    public ObjectInputStream(InputStream in): 创建一个指定InputStream的ObjectInputStream。
    反序列化操作:
    public final Object readObject () : 读取一个对象。
    Serializable 接口给需要序列化的类,提供了一个序列版本号。serialVersionUID 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。
    7.打印流
    PrintStream类
    构造方法:
    public PrintStream(String fileName): 使用指定的文件名创建一个新的打印流。