---------------------- android培训、java培训、期待与您交流! ----------------------
IO流用来处理设备之间的数据传输,java对数据的操作时通过流方式
常用流的一览表:
| 字节流 | 字符流 | ||
输入流 | 输出流 | 输入流 | 输出流 | |
两个基类 | InputStream | OutputStream
| Reader | Writer
|
文本文件的常用流 |
|
| FileReader | FileWriter |
其他文件的流 | FileInputStream
| FileOutputStream
|
|
|
缓冲流 | BufferedInputStream
| BufferedOutputStream
| BufferedReader | BufferedWriter |
转换流
InputStreamRead 字节通向字符的桥梁
OutputStreamWriter 字符通向字节的桥梁
读取键盘录入。
System.out:对应的是标准输出设备,控制台。
System.in:对应的标准输入设备:键盘。
IO包中的其他类
管道流
*PipedinputStream和PipedOutStream
*输入输出可以直接进行连接,通过结合线程使用。
打印流
*PrintWriter与PrintStream
*可以直接操作输入流和文件。
序列流
*SequenceInputStream
*对多个流进行合并
操作对象
*ObjectInputStream与ObjectOutputStream
*被操作的对象需要实现Serializable(标记接口)
操作基本数据类型
*DataInputStream与DateOutputStream
操作字节数组
*ByteArrayInputStream与ByteArrayOutputStream
操作字符数组
*CharArrayReader与CharArrayWrite
操作字符串
StringReader与StringWriter
实例与应用:
需求:在硬盘上,创建一个文件并写入一些文字数据。
找到一个专门用于操作文件的Writer子类对象。FileWriter。
import java.io.*;
创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件,而且该文件被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。明确数据要存放的目的地。
public static void main(String[] args) throws IOExpression{
抛出IOExpression
FileWriter fw = new FileWriter("demo.txt");
//写入字符串,写入到流中,不直接写入文件
fw.write("abcde");
//刷新流对象中的缓冲中数据
fw.flush(); ××
//关闭流资源关闭之前会刷新一次内部的缓冲中的数据,将数据刷到目的地中,和
flush区别:刷新后,流可继续使用,close刷新后,会将流关闭,将资源到底层关掉
fw.close();
fw.write("haha"); //已关闭,会抛出异常
}
io异常的处理方式:
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
FileWriter fw = null;
try
{
fw = new FileWriter("k:\\demo.txt"); //windows写两个目录分隔符,转义字符
fw.write("abc");
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}
}
IO流的小知识点:
BufferedReader的特点:1、是装饰类,增加Reader系列的功能;2,有跨平台的转行符newLine();
3,可以一次读一行的方法readLine();4,其子类LineNumberReader是个可以有行号输出的子类。
转换流的理解:
|
字节>>>>>>>>>>>>>>>>>à字符 >>>>>>>>>>>>>>>>>>字节
转换流的使用场合:1、字节需要转换成字符操作时,2、需要制定编码表时。
流操作的基本规律:
通过三个明确来完成。
1.明确:源和目的。
源:输入流。 InputStream Reader
目的:输出流。 OutputStream Writer
2.明确:操作的数据是否是纯文本。
是:用字符流。
否:用字节流。
3.当体系明确后,在明确要使用哪个具体的对象。通过设备来进行区分。
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台。
例如:
将一个文本文件中的数据存储到另一个文件中。(复制文件)
源:文本文件。InputStream Reader 因为是源所以使用读取流。
是不是操作文本文件:
是:这时就选择Reader.这样体系就明确了。
接下来明确对象:要是用该体系的哪些对象。
明确设备:硬盘。(硬盘上的一个文件)
Reader体系中可以操作文件的对象是FileReader.
是否需要提供效率:
是:加入Reader体系中缓冲区 BufferedReader.
从这个规律上入手,试着分析一下。
并从多个方面考虑,加上反复应用,对于IO流的理解与应用会有很大的提高
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima