黑马程序员---IO流【java】

来源:互联网 发布:游戏手机制作软件 编辑:程序博客网 时间:2024/04/28 05:02

------- android培训java培训、期待与您交流! ----------

IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的方式,流按操作数据分为字节流和字符流,流按流向分为输入流和输出流。

字节流2个基类

InputStream OutputStream

字符流2个基类

Reader Writer

FileWriter:后缀名是父类名,前缀名是该流对象的功能。

FileWriter fw = newFileWriter("demo.txt");

创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。其实该步就是在明确数据要存放的目的地。

fw.write("abcde");调用write方法,将字符串写入到流中。

fw.flush();刷新流对象中的缓冲中的数据。将数据刷到目的地中。

fw.close();关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。

IO异常的处理方式。

import java.io.*;

FileWriter fw = null;

                   try

                   {

                            fw= new FileWriter("demo.txt");

                            fw.write("abcdefg");

 

                   }

                   catch(IOException e)

                   {

                            System.out.println("catch:"+e.toString());

                   }

                   finally

                   {

                            try

                            {

                                     if(fw!=null)

                                               fw.close();                                    

                            }

                            catch(IOException e)

                            {

                                     System.out.println(e.toString());

                            }

                   }

FileReader fr = new  Filereader(Demo.txt);

创建一个文件读取流对象,和指定名称的文件相关联。

读取方式:

read():一次读一个字符。而且会自动往下读。

Int ch=0

While((ch=fr.read())!=-1)

{System.out.println(“ch=”+(char)ch);}

通过字符数组进行读取。

定义一个字符数组。用于存储读到字符。该read(char[])返回的是读到字符个数。

char[] buf = new char[1024];

int num=0;

while( (num=fr.read(buf))!=-1)

{System.out.println(new String(buf,0,num));}

fr.close

缓冲区:

缓冲区的出现是为了提高流的操作效率而出现的。

该缓冲区中提供了一个跨平台的换行符。newLine();

BufferedWriter bufw = newBufferedWriter(fw);

只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。

关闭缓冲区,就是在关闭缓冲区中的流对象。

该缓冲区提供了一个一次读一行的方法readLine,方便于对文本数据的获取。当返回null时,表示读到文件末尾。

readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。

readLine方法是字符流BufferedReader类中的方法。

装饰设计模式:

当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。

所以装饰类和被装饰类通常是都属于一个体系中的。

LineNumberReader

setLineNumber();

getLineNumber();

字节流:

InputStream OutputStream

BufferedInputStream  BufferedOutputStream

available()

read()

write()

close()

读取键盘录入。

System.out:对应的是标准输出设备,控制台。(屏幕)

System.in:对应的标准输入设备:键盘。

获取键盘录入对象。InputStream in = System.in;

将字节流对象转成字符流对象,使用转换流。InputStreamReader

InputStreamReader isr = newInputStreamReader(in);

为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader

BufferedReader bufr = newBufferedReader(isr);

键盘的最常见写法。BufferedReader bufr =new BufferedReader(newInputStreamReader(System.in));

OutputStream out = System.out;

OutputStreamWriter osw = newOutputStreamWriter(out);

BufferedWriter bufw = newBufferedWriter(osw);

BufferedWriter bufw = newBufferedWriter(new OutputStreamWriter(System.out));

流操作的基本规律:

通过三个明确来完成。

1、明确源和目的。

         源:输入流。InputStream  Reader

         目的:输出流。OutputStream  Writer。

2、操作的数据是否是纯文本。

         是:字符流。

         不是:字节流。

3、当体系明确后,在明确要使用哪个具体的对象。

         通过设备来进行区分:

         源设备:内存,硬盘。键盘

         目的设备:内存,硬盘,控制台。

改变标准输入输出设备:

System.setIn()

System.setOut()

转换流是字符和字节之间的桥梁,通常涉及到字符编码转换时需要用到转换流。

 

原创粉丝点击