IO(Input  Output)

IO流用来处理设备之间的数据传输

Java对数据的操作是通过流的方式

Java用于操作流的对象都在IO包中

流按操作数据分为两种:字节流与字符流。 

流按流向分为:输入流,输出流。

IO流常用基类

字节流的抽象基类:

InputStream OutputStream

字符流的抽象基类:

Reader Writer

注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。

InputStream的子类FileInputStream)

Reader的子类FileReader。)

IO程序的书写

导入IO包中的类

进行IO异常处理

finally中对流进行关闭

字符流——创建文件

创建流对象,建立数据存放文件

FileWriter fw = new FileWriter(“Test.txt”);

调用流对象的写入方法,将数据写入流

fw.write(“text”);

关闭流资源,并将流中的数据清空到文件中。

fw.close();

完整代码

FileWriter fw = null;

              try{

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

                     fw.write("text");

              }

              catch(IOException e){

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

              }

              finally{

                     If(fw!=null)

 

                     try{

                                                                                    fw.close();

                     }

                     catch(IOException e){

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

 

                     }                  

              }

字符流——读取文件

建立一个流对象,将已存在的一个文件加载进流。

FileReader fr = new FileReader(“Test.txt”);

创建一个临时存放数据的数组。

char[] ch = new char[1024];

调用流对象的读取方法将流中的数据读入到数组中。

fr.read(ch);

完整代码

FileReader fr = null;

       try{

              fr= new FileReader("c:\\test.txt");

              char[]buf = new char[1024];

              intlen= 0;

              while((len=fr.read(buf))!=-1){

                     System.out.println(newString(buf,0,len));

              }

       }

       catch(IOException e){

              System.out.println("read-Exception:"+e.toString());

       }

       finally{

              if(fr!=null){

                     try{

                            fr.close();

                     }

                     catch(IOException e){

                            System.out.println("close-Exception:"+e.toString());

                     }

              }

       }

字符流的缓冲区

缓冲区的出现提高了对数据的读写效率。

对应类

BufferedWriter

BufferedReader

缓冲区要结合流才可以使用。

在流的基础上对流的功能进行了增强。

装饰设计模式

对原有类进行了功能的改变,增强。

装饰模式的基本格式。

它与继承有什么不同?

了解BufferedReader的原理。

字节流

基本操作与字符流类相同

但它不仅可以操作字符,还可以操作其他媒体文件

转换流

InputStreamReader,OutputStreamWriter

转换流的由来

字符流与字节流之间的桥梁

方便了字符流与字节流之间的操作

转换流的应用

字节流中的数据都是字符时,转成字符流操作更高效。

标准输入输出流

System类中的字段:inout

它们各代表了系统标准的输入和输出设备。

默认输入设备是键盘,输出设备是显示器。

System.in的类型是InputStream.

System.out的类型是PrintStreamOutputStream的子类FilterOutputStream 的子类.

标准输入输出流示例

:获取键盘录入数据,然后将数据流向显示器,那么显示器就是目的地。

通过System类的setInsetOut方法对默认设备进行改变。

System.setIn(new FileInputStream(1.txt));//将源改成文件1.txt

System.setOut(new FileOutputStream(2.txt));//将目的改成文件2.txt

因为是字节流处理的是文本数据,可以转换成字符流,操作更方便。

BfferedReader bufr =

              newBufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw =

              newBufferedWriter(new OutputStreamWriter(System.out));

流的基本应用小节

流是用来处理数据的。

处理数据时,一定要先明确数据源,与数据目的地(数据汇)。

数据源可以是文件,可以是键盘。

数据目的地可以是文件、显示器或者其他设备。

而流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理.转换处理等。

File

用来将文件或者文件夹封装成对象

方便对文件与文件夹的属性信息进行操作。

File对象可以作为参数传递给流的构造函数。

了解File类中的常用方法。

递归

函数自己调用自己。

注意:递归时一定要明确结束条件。

应用场景:

当某一功能要重复使用时。

IO包中的其他类

RandomAccessFile

随机访问文件,自身具备读写的方法。

通过skipBytes(intx),seek(int x)来达到随机访问。

管道流

PipedInputStreamPipedOutputStream

输入输出可以直接进行连接,通过结合线程使用。

IO包中的其他类

打印流

PrintWriterPrintStream

可以直接操作输入流和文件。

序列流   

SequenceInputStream

对多个流进行合并。

操作对象

ObjectInputStreamObjectOutputStream

被操作的对象需要实现Serializable(标记接口);

操作基本数据类型

DataInputStreamDataOutputStream

操作字节数组

ByteArrayInputStreamByteArrayOutputStream

操作字符数组

CharArrayReaderCharArrayWrite

操作字符串

StringReader StringWriter

字符编码

字符流的出现为了方便操作字符。

更重要是的加入了编码转换。

通过子类转换流来完成。

InputStreamReader

OutputStreamWriter

在两个对象进行构造的时候可以加入字符集。

最近51CTO+IT十八掌免费大数据课程,有兴趣和问题的小伙伴可以去观看徐培成老师直播课或者视频。