IO流的操作规律。
字符流:
FileReader
FileWriter
BufferedReader
BufferedWriter
InputStreamReader
OutputStreamWriter
字节流:
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOUtputStream
//疑问:开始时,用哪个流对象解决问题呢?
明确一:明确源和目的。
源:就需要读,就需要使用输入体系。InputStream Reader
目的:就需要写,就需要使用输出体系。OutputStream Writer
明确二:处理的数据是否是纯文本数据。
是:就使用字符流。
源:Reader
目的:Writer
否:就是用字节流。
源:InputStream
目的:OutputStream
两个明确都确定后,可以确定需要使用哪个体系。
明确三:具体是哪个设备,明确设备的目的是为了确定具体的对象。
源设备:
键盘,System.in
硬盘,操作文件的对象。File开头的流对象。
内存,数组。ByteArrayInputStream CharArrayReader StringReader
网络,Socket
目的设备:
硬盘,操作文件的对象。File开头的流对象。
屏幕(控制台)System.out
内存,数组 ByteArrayOutputStream CharArrayWriter StringWriter
网络,Socket
需求:将字符串数据写到硬盘上。
目的:OutputStream Writer
纯文本?是,Writer
设备?硬盘,FileWriter
FileWriter fw = new FileWriter("a.txt");
明确四:是否需要额外功能?
1,需要高效吗?BufferedInputStream BuffedOutputStream
2,需要字节和字符之间的桥梁吗?转换流。InputStreamReader OutputStreamWriter
3,需要保证数据输出时表现形式吗?PrintWriter PrintStream
4,需要对对象进行序列化和反序列化吗?ObjectInputStream ObjectOutputStream
5,需要操作基本数据类型值吗?DataInputStream DataOutputStream
6,需要进行数据的合并吗?SequenceInputStream
---------------------------------------------------
需求1:对文本文件进行复制。
明确1:源和目的。
源:InputStream Reader
目的:OutputStream Writer
明确2:是否是纯文本。
是!
源:Reader
目的:Writer
明确3:具体的设备。
源:硬盘。
目的:硬盘。
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
明确4:额外功能。
需要,高效。
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));
当然如果仅为复制文件,在该例中可以使用字节流完成。
需求2:读取键盘录入数据并保存到文件中。
明确1:源,目的。
源:InputStream Reader
目的:OutputStream Writer
明确2:是纯文本。
是!
源:Reader
目的:Writer
明确3:具体设备。
源设备:键盘。
目的设备:硬盘。
InputStream in = System.in;
//byte[] buf = new byte[1024];
//int len = in.read(buf);
//str = new String(buf);
FileWriter fw = new FileWriter("a.txt");
fw.write(str);
虽然可以用该代码完成,但是麻烦。
解决问题,源是字节流,目的是字符流。而最终确定的都是字符流体系。
源使用的Reader就可以了。那么怎么能将源字节流转成字符流呢?
明确4:额外功能?
需要,转换。将字节流转成字符流。
InputStreamReader isr = new InputStreamReader(System.in);
FileWriter fw = new FileWriter("a.txt");
这时就需要定义一个字符数据作为缓冲。
还需要其他功能吗?需要,高效。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//以后获取键盘录入,就使用该句。
BufferedWriter bufw = new BufferedWriter(new FileWriter("a.txt"));
String line = null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufw.write(line);
bufw.newLine();
bufw.flush();
}
需求3:读取硬盘上的文本文件将数据打印到屏幕上。
明确1:源,目的。
源:InputStream Reader
目的:OutputStream Writer
明确2:纯文本?
是!
源:Reader
目的:Writer。
明确3:具体设备:
源设备:硬盘。
目的设备:屏幕。
FileReader fr = new FileReader("a.txt");
PrintStream out = System.out;
明确4:额外功能。
高效!
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
也希望目的也高效。想使用字符流的缓冲区对其高效。而System.out是字节流。
读到的字符,最终要转成成字节流,到System.out屏幕上。
需要用字符转成字节的桥梁。
BufferedWrier bufw = new BufferedWriter(new OutputStreamWriter(Sysetm.out));
需求4:读取一个文本文件,将数据转成UTF-8保存到另一个文件中。
明确1:源,目的。
源:InputStream Reader
目的:OutputStream Writer
明确2:纯文本?
是!
源:Reader
目的:Writer。
明确3:具体设备。
源:硬盘。
目的:硬盘。
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
不行!
源可以使用FileReader,因为可以使用默认本地编码。
而目的明确指定了编码表。就不可以使用FileWriter。
在字符转成字节的过程,需要加入编码。
明确4:需要额外功能?
需要,转换。
FileReader fr = new FileReader("a.txt");
//要转成可以操作文件的字节流。
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");
还需要额外功能吗?
需要,高效。
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt"),"utf-8"));
-------------------------------------------------------
练习:读取键盘录入,将读取的数据进行临时存储,如果存储的数据是over。则键盘录入结束。
如果不是,则将数据转成大写显示在屏幕上。
如果不用readLine,你怎么做呢?
预习:自己演示一下File类中的list
-----------------------------------------------------------
IO流的体系:
字节流
OutputStream
|--FileOutputStream:
|--FilterOutputStream
|--BufferedOutputStream:
|--DataOutputStream:
|--PrintStream:
|--ObjectOutputStream:
|--PipedOutputStream:
|--ByteArrayOutputStream:
InputStream
|--FileInputStream:
|--FilterInputSteam
|--BufferedInputStream:
|--DataInputStream:
|--ObjectInputStream:
|--PipedInputStream:
|--ByteArrayInputStream:
|--SequenceInputStream:
字符流
Reader
|--BufferedReader:
|--LineNumberReader:
|--InputStreamReader:
|--FileReader:
|--CharArrayReader:
|--StringReader:
Writer
|--BufferedWriter:
|--OutputStreamWriter:
|--FileWriter:
|--PrintWriter:
|--CharArrayWriter:
|--StringWriter:
RandomAccessFile:
File:
-----------------------------------------------
面向对象:
封装:
隐藏实现细节,多外暴露公共的接口。
继承:
提高代码的复用性,类与类之间有了关系。
多态:★★★★★
提高了程序的扩展性。向上转型,向下转型。USB接口的例子。
集合框架:
|--ArrayList:★★★★★
|--LinkedList:
|--HashSet:★★★★★
|--LinkedHashSet:★★★
|--TreeSet:
|--HashMap:★★★★★★
|--LinkedHashMap:★★★
|--TreeMap:
|--Hashtable
|--Properties:★★★★★★
String:
StringBuilder:
Integer:
IO流:
File:★★★★★
FileInputStream
FileOutputStream
FileReader
FileWriter
BufferedReader
BUfferedWriter
InputStreamReader★★★★★
OutputStreamWriter★★★★★
PrintWriter:★★★★★
IO流的操作规律。★★★★★★★
需求5:将一个对象写入到文件中,并读取该对象。
将这些知识点都总结完毕后,将对应的练习做完,通过练习来打到复习的效果。
三个阶段测试秒杀一遍。