01.第一章:IO概述_IO流概述及分类:

1).字节流:以“字节”的方式操作数据的。可以读、写任何文件。

A).输出流:OutputStream(抽象类)(三种输出的方法)
1).write(int b):输出一个字节
2).write(byte[] arr):输出一个字节数组。
3).write(byte[] arr,int off,int len):输出字节数组的一部分。
|–FileOutputStream(子类)【昨天讲的】 B).输入流:InputStream(抽象类)
|–FileInputStream(子类)

2).字符流:以“字符”的方式操作数组。只能读、写纯文本文件。

A).输出流:Writer(抽象类)
|–OutputStreamWriter(转换流)(下次课讲)
|–FileWriter(子类–今天讲) B).输入流:Reader(抽象类)

|–InputStreamReader(转换流) (下次课讲)
|–FileReader(子类–今天讲)

02.第一章:字节流_输入流_InputStream的读取方法:

1).读取的方法:

1).int read():读取一个字节;
2).int read(byte[] byteArary):读取一个byte[]数组。

2).子类FileInputStream的使用:

1).构造方法: 1).FileInputStream(String filename):
2).FileInputStream(File filename):

注意:
1).构造时,文件必须存在,否则抛异常;
2).构造时,只能构造在文件上,不能构造在目录上。
3).示例代码:

public class Demo {
    public static void main(String[] args) throws Exception {
        //1.构造一个输入流
        InputStream in = new FileInputStream("demo01.txt");
        //2.读取--一次读取一个字节
        /*int b = 0;
        while((b = in.read()) != -1) {
            System.out.println("转转为字符:" + (char)b);
        }*/

        //读取--一次读取多个字节
        byte[] arr = new byte[3];
        int len = 0;
        while((len = in.read(arr)) != -1) {
            //使用byte[]数组构造一个字符串
            String str = new String(arr,0,len);
            System.out.println("转换为字符串:" + str);
        }
        //3.关闭流
        in.close();


    }
}

4).练习_文件复制:

public class Demo {
 public static void main(String[] args) throws Exception {
//1.构造一个到源文件的输入流 InputStream in = new FileInputStream(“D:\20190321(92期)-就业班(下午)\就业班-day09-File类、递归\课堂视频\02.第一章:File类_File类的构造方法.itcast”);
//2.构造一个到目标文件的输出流
OutputStream out = new FileOutputStream(“D:\20190321(92期)-就业班(下午)\就业班-day09-File类、递归\课堂视频\copy.itcast”);
//3.一次读、写一个字节–慢
 /* int b = 0;
 while ((b = in.read()) != -1) {
 out.write(b);
 }*///4.一次读、写一个字节数组–快
byte[] byteArray = new byte[1024 ];
        int len = 0;
        while ((len = in.read(byteArray)) != -1) {
            out.write(byteArray,0,len);
        }
        out.close();
        in.close();
        System.out.println("复制完毕!");
    }
}

03.第三章:字符流_概述

1)."字符流"是读写“纯文本文件”。使用“字节流”只能一次读写一个字节,但对于其它国家的文字,很多都是两个、多个字节表示一个字符,这样使用“字节流”操作就很不方便,所以Java又提供了“字符流”。

2)."字符流"也是基于“字节流”的。

04.第三章:字符流_输出流_Writer的输出方法

1).五种输出的方法:

1).write(int c):输出一个字符。
2).write(char[] arr):输出一个字符数组;
3).write(char[] arr,int off,int len):输出字符数组的一部分;
4).write(String s):输出一个字符串。
5).write(String s,int off,int len):输出字符串的一部分。

2).子类FileWriter的构造方法:

1).FileWriter(String fileName) 构造一个给定文件名的FileWriter对象。
2).FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。
3).FileWriter(File file) 给一个File对象构造一个FileWriter对象。
4).FileWriter(File file, boolean
append) 给一个File对象构造一个FileWriter对象。

3).示例代码:

public class Demo {
    public static void main(String[] args) throws IOException {
        //1.构造一个输出流
        FileWriter out = new FileWriter("demo03.txt");
        //2.输出
        //1).输出一个字符
        out.write(98);
        //2).输出一个字符数组
        char[] chArray = {'a', 'b', 'c', '你', '好'};
        out.write(chArray);
        //3).输出字符数组的一部分
        //只输出:你好
        out.write(chArray,3,2);

//4).输出一个字符串【重点掌握】
out.write(“呵呵,我爱Java!”);

//5).输出字符串的一部分
String str = “我爱Java”;
//只输出:Java
out.write(str,2,4);

//3.清理缓存 // out.flush();//刷新缓存

//4.关闭文件 out.close();//相当于:flush() + close()
}
}

05.第三章:字符流_输出流_Writer的追加写入及换行

1).追加写入:构造方法
FileWriter(String(File) name,boolean append):
第二个参数为true,即为:追加写入

2).换行:
out.write("\r\n");

06.第三章:字符流_输入流_Reader的读取的方法

1).Reader的读取的方法:(两种)

1).int read():读取一个字符;
2).int read(char[] chArray):读取一个字符数组

2).子类FileReader的构造方法:

1).FileReader(String fileName):
2).FileReader(File fileName):

3).示例代码:

public class Demo {
    public static void main(String[] args) throws Exception {
        //1.构造一个输入流
        FileReader in = new FileReader("demo04.txt");
        //2.一次读取一个字符
        /*int c = 0;
        while((c = in.read()) != -1) {
            System.out.println("转换为字符:" + (char)c);
        }*/

//3.一次读取多个字符

char[] chArray = new char[3];
        int len = 0;
        while ((len = in.read(chArray)) != -1) {
            System.out.println(new String(chArray,0,len));
        }
    }
}

07.第四章:IO异常的处理_JDK7前的处理方式

public static void main(String[] args) {
    FileWriter out = null;
    try {
        out = new FileWriter("demo05.txt");
        out.write("哈啰");

    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if(out != null) {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

08.第四章:IO异常的处理_JDK7后的处理方式

public class Demo {
    public static void main(String[] args) {
        try(FileWriter out = new FileWriter("demo06.txt")){
            out.write("呵呵");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //当try...catch...执行完毕后,out会自动关闭。不需要我们自己关闭了
    }
}

小结字节流和字符流:
1).字节流:只要是复制文件,使用字节流

A).输出流:OutputStream(抽象类)(三种输出的方法)
1).write(int b):输出一个字节
2).write(byte[] arr):输出字节数组
3).write(byte[] arr,int off,int len):输出字节数组的一部分。
|–FileOutputStream(子类) B).输入流:InputStream(抽象类)(两种读取的方法)
1).int read():读取一个字节;
2).int read(byte[] byteArray):读取一个字节数组。
|–FileInputStream(子类)

2).字符流:操作纯文本文件,使用字符流。

A).输出流:Writer(抽象类)(五种输出的方法)
1).write(int c):输出一个字符
2).write(char[] charr):输出字符数组
3).write(char[] arr,int off,int len):输出字符数组的一部分
4).write(String s):输出一个字符串。
5).write(String s,int off,int len):输出字符串的一部分
|–OutputStreamWriter(转换流–下次课讲)
|–FileWriter(子类)

B).输入流:Reader(抽象类)(两种读取的方法)

1).int read():读取一个字符;
2).int read(char[] chArray):读取一个字符数组。 |–InputStreamReader(转换流–下次课讲)
|–FileReader(子类)

09.第五章:属性集_Properties类概述

1).java.util.Properties(类):它是一个“Map”集合类,但他内部包含了一些和IO流结合使用的方法,可以很方便的操作“配置文件”。

2).什么是“配置文件”:指程序在运行时存储的一些用户数据的文件。它就是纯文本文件。在世界范围内, 有一个对于配置文件的通用的规范,配置文件的内部格式:
配置文件.txt
--------------------------------------
名1 = 值
名2 = 值

名n = 值
由于这种结构非常匹配Map的结构,所有Java中提供了Map的类来结合IO流,操作这种配置文件。

10.第五章:属性集_Properties类与流相关的方法介绍

1).store(Writer out,String comm):将集合中的数据写入到配置文件;
2).load(Reader in):将文件中的数据读取到集合中。