黑马程序员——JAVA基础——IO流

来源:互联网 发布:按网络功能层次分 编辑:程序博客网 时间:2024/05/17 03:05

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

一、IO流:

     1、概述:

           IO用于在设备间进行数据传输的操作

     2、分类:

        A:流向:

            输入流 读取数据

            输出流 写出数据

        B:数据类型:

           字节流:

                字节输入流

                字节输出流

 

          字符流:

                 字符输入流

                字符输出流

图解:


   注意:

           a:如果没有明确说明按照什么分,默认按照数据类型分。

           b:除非文件用windows自带的记事本打开能够读懂,才采用字符流,否    则建议使用字节流。

      3FileOutputStream写出数据

          A:操作步骤

            a:创建字节输出流对象

            b:调用write()方法

            c:释放资源

         B:代码体现:

             FileOutputStream fos = new FileOutputStream("fos.txt");

             fos.write("hello".getBytes());

             fos.close();

         C:要注意的问题?

           a:创建字节输出流对象做了几件事情?

           b:为什么要close()?

           c:如何实现数据的换行?

           d:如何实现数据的追加写入?

Eg

 

<span style="font-family:Arial Black;">package cn.itcast_02;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;public class OutputStreamWriterDemo {public static void main(String[] args) throws IOException {// 创建对象// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(// "osw.txt")); // 默认GBK// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(// "osw.txt"), "GBK"); // 指定GBKOutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("osw.txt"), "UTF-8"); // 指定UTF-8// 写数据osw.write("中国");// 释放资源osw.close();}}</span>

4FileInputStream读取数据

    A:操作步骤

       a:创建字节输入流对象

       b:调用read()方法

       c:释放资源

   B:代码体现:

       FileInputStream fis = new FileInputStream("fos.txt");

       //方式1

           int by = 0;

           while((by=fis.read())!=-1) {

            System.out.print((char)by);

        }

    //方式2

          byte[] bys = new byte[1024];

          int len = 0;

           while((len=fis.read(bys))!=-1) {

          System.out.print(new String(bys,0,len));

       }

        fis.close();

Eg

 

<span style="font-family:Arial Black;">package cn.itcast_01;import java.io.FileInputStream;import java.io.IOException;public class FileInputStreamDemo {public static void main(String[] args) throws IOException {// 创建字节输入流对象FileInputStream fis = new FileInputStream("a.txt");// 读取数据// int by = 0;// while ((by = fis.read()) != -1) {// System.out.print((char) by);// }byte[] bys = new byte[1024];int len = 0;while ((len = fis.read(bys)) != -1) {System.out.print(new String(bys, 0, len));}// 释放资源fis.close();}}</span>

 

二、字节流

     1、概述:

               字节流和字符流的基本操作是相同的,但字节流还可以操作其他媒体文件。

               由于媒体文件数据中都是以字节存储的,所以,字节流对象可直接对媒体文件的数据写入到文件中,而可以不用再进行刷流动作。

                读写字节流:InputStream   输入流(读)

                                     OutputStream  输出流(写)

    2、为何不用进行刷流动作:

            因为字节流操作的是字节,即数据的最小单位,不需要像字符流一样要进行转换为字节。所以可直接将字节数据写入到指定文件中。

    3、字节缓冲区流

        ABufferedOutputStream

        BBufferedInputStream

三、字符流

      1、概述:

         字节流操作中文数据不是特别的方便,所以就出现了转换流。

                转换流的作用就是把字节流转换字符流来使用。

      2、转换流其实是一个字符流

              字符流 字节流 编码表

      3、编码表

             A:就是由字符和对应的数值组成的一张表

             B:常见的编码表

                  ASCII :最高位为符号位,其余位数值为

                       Eg:    ‘a’   97

                                     ‘A’   65

                                     ‘0’   48

                ISO-8859-1:拉丁码表   8为表示一个数据

                GB2312:中国的中文编码表;

                GBK:中国的中文编码表升级,融合了更多的中文文字符号;

                GB18030GBK的取代版本

                UTF-8:最多用三个字节来表示一个字符;            

                Unicode:国际标准码,融合了多种文字;(所有文字都用两个字节来表示,java       语言就是Unicode

 

          C:字符串中的编码问题

                    编码:

                        String -- byte[]

                    解码:

                       byte[] -- String

      4IO流中的编码问题

          AOutputStreamWriter

                OutputStreamWriter(OutputStream os):默认编码,GBK

                OutputStreamWriter(OutputStream os,String charsetName):指定编码。

          BInputStreamReader

                InputStreamReader(InputStream is):默认编码,GBK

                InputStreamReader(InputStream is,String charsetName):指定编码

          C:编码问题其实很简单

                     编码只要一致即可

      5、字符缓冲区流

          ABufferedReaderreadLine()方法可以读取一行字符(不包含换行符号),读到最后不是-1而是return

Eg:

<span style="font-family:Arial Black;">package cn.itcast_05;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class BufferedReaderDemo {public static void main(String[] args) throws IOException {// 创建字符缓冲输入流对象BufferedReader br = new BufferedReader(new FileReader("bw.txt"));// 方式1// int ch = 0;// while ((ch = br.read()) != -1) {// System.out.print((char) ch);// }// 方式2char[] chs = new char[1024];int len = 0;while ((len = br.read(chs)) != -1) {System.out.print(new String(chs, 0, len));}// 释放资源br.close();}}</span>


          BBufferedWriternewLine()可以读出一个跨平台的换行符号”\r\n”

Eg:

<span style="font-family:Arial Black;">package cn.itcast_05;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;/* * 字符流为了高效读写,也提供了对应的字符缓冲流。 * BufferedWriter:字符缓冲输出流 * BufferedReader:字符缓冲输入流 *  * BufferedWriter:字符缓冲输出流 * 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。  * 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。  */public class BufferedWriterDemo {public static void main(String[] args) throws IOException {// BufferedWriter(Writer out)// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(// new FileOutputStream("bw.txt")));BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));bw.write("hello");bw.write("world");bw.write("java");bw.flush();bw.close();}}</span>


 

 

四、总结:

     IO

         |--字节流

              |--字节输入流

                       InputStream

                       int read():一次读取一个字节

                       int read(byte[] bys):一次读取一个字节数组

                        |--FileInputStream

                        |--BufferedInputStream

              |--字节输出流

                       OutputStream

                       void write(int by):一次写一个字节

                       void write(byte[] bys,int index,int len):一次写一个字节数组的一部分

                      |--FileOutputStream

                      |--BufferedOutputStream

        |--字符流

             |--字符输入流

                       Reader

                       int read():一次读取一个字符

                       int read(char[] chs):一次读取一个字符数组

                       |--InputStreamReader

                           |--FileReader

                       |--BufferedReader

                          String readLine():一次读取一个字符串

            |--字符输出流

                      Writer

                      void write(int ch):一次写一个字符

                      void write(char[] chs,int index,int len):一次写一个字符数组的一部分

                      |--OutputStreamWriter

                           |--FileWriter

                      |--BufferedWriter

                          void newLine():写一个换行符

                         void write(String line):一次写一个字符串

图解:

 

 

 

-----------android培训java培训、java学习型技术博客、期待与您交流!------------


0 0