JavaSE---IO流

1、Java中把不同的输入、输出源(键盘、文件读写、网络连接等)抽象为流(Stream);

2、通过流的方式,允许Java程序  以相同的方式  来访问不同的输入/输出源;

3、流的分类:

    1、按流向分:(输入、输出是从程序运行所在的内存角度出发)

      输入流:只能从其读取数据,不能写入数据;

      输出流:只能向其写数据,不能读取数据;

    2、按操作数据单元的不同:

      字节流:操作的最小数据单元是8位的字节;

      字符流:操作的最小数据单元是16位的字符;

    3、按流的角色:

      节点流:可以从/向一个特定的IO设备(磁盘、网络等)读/写数据的流(又称为低级流、使用节点流,程序直接连接到实际的数据源);

      处理流:对一个已存在的流进行封装来实现数据的读/写(又称为高级流);

           使用处理流的好处:只要使用相同的处理流,就可以使用相同的输入/输出代码来访问不同的数据源;

4、【节点流---输入流】

    1、InputStream:

      方法:

        int read();  从输入流中读取单个字节,返回  读取的字节数据;

        int read(byte[] buffer);   从输入流中读取最多buffer.length个字节的数据,  并将其存储在字节数组buffer中,  返回 实际读取的字节数;

        int read(byte[] buffer,int off,int length); 

package com.an.io;

import java.io.FileInputStream;
import java.io.InputStream;

public class InputSreamTest {

    public static void main(String[] args) {
        String userDir = System.getProperty("user.dir");
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream(userDir + "/src/com/an/Server.java");
            byte[] buffer = new byte[1024];
            int length = inputStream.read(buffer);
            if (length > 0) {
                System.out.println(new String(buffer, 0, buffer.length).trim());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

 

    2、Reader:

      方法:

        int read();  从输入流中读取单个字符,返回  读取的字符数据;

        int read(char[] buffer);  从输入流中读取最多buffer.length个字符的数据,  并将其存储在字符数组buffer中,  返回  实际读取的字符数;

        int read(char[] buffer,int off,int length); 


package com.an.io;

import java.io.FileReader;
import java.io.Reader;

public class ReaderTest {

public static void main(String[] args){
Reader reader=null;
try {
reader=new FileReader(System.getProperty("user.dir")+"/src/com/an/Server.java");
char[] buffer=new char[10240];
int length=reader.read(buffer);
if (length>0){
System.out.println(new String(buffer,0,buffer.length).trim());
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if (reader!=null){
reader.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}

    3、InputStream和Reader本身不能创建实例,它们都有一个  用于读取文件的流:FileInputStream、FileReader

       

5、【节点流---输出流】

    1、OutputStream

      方法:

        void write(int c);  将指定字节、字符输出到输出流中;

        void write(byte[]/char[] buffer);  将指定字节/字符数组输出到输出流中;

        void write(byte[]/char[] buffer,int off,int length);

package com.an.io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class OutputStreamTest {

    public static void main(String[] args){
        InputStream inputStream=null;
        OutputStream outputStream=null;
        try {
            inputStream=new FileInputStream(System.getProperty("user.dir")+"/src/com/an/Server.java");
            byte[] buffer=new byte[10240];
            int length=inputStream.read(buffer);
            if (length>0){
                outputStream=new FileOutputStream(System.getProperty("user.dir")+"/src/com/an/CopyServer.text");
                outputStream.write(buffer);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (outputStream!=null){
                    outputStream.close();
                }
                if (inputStream!=null){
                    inputStream.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

    2、Writer

      方法:

        void write(String s);  将指定字符串输出到输出流中;

        void write(String s,int off,int length);

package com.an.io;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;

public class WriterTest {

    public static void main(String[] args){
        Reader reader=null;
        Writer writer=null;
        try {
            reader=new FileReader(System.getProperty("user.dir")+"/src/com/an/Server.java");
            char[] buffer=new char[10240];
            int length=reader.read(buffer);
            if (length>0){
                writer=new FileWriter(System.getProperty("user.dir")+"/src/com/an/CopyTwoServer.text");
                writer.write(buffer);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (writer!=null){
                    writer.close();
                }
                if (reader!=null){
                    reader.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

 

6、【处理流】

    1、当使用处理流时,关闭输入/输出流资源时,只需要关闭最上层的处理流即可(系统会自动关闭该处理流封装的节点流);

    2、BufferReader 

      1.1  BufferReader具有一个缓冲功能,一次可以读取一行文本(以换行符为准,如果没有读到换行符,程序将阻塞,直到读到换行符为止);

      1.2  经常把读取文本的输入字节流包装为BufferReader;

package com.an.io;

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 *  java的标准输入流System.in、标准输出流System.out
 */
public class TransferStreamTest {

    public static void main(String[] args){
        InputStreamReader inputStreamReader=null;
        BufferedReader bufferedReader=null;
        try {
            inputStreamReader=new InputStreamReader(System.in);
            bufferedReader=new BufferedReader(inputStreamReader);
            String line=null;
            while ((line=bufferedReader.readLine())!=null){
                if (line.equals("exit")){
                    System.exit(1);
                }
                System.out.println(line);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (bufferedReader!=null){
                    bufferedReader.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

7、【节点流、处理流使用指南】:

    如果需要处理的内容是文本,推荐使用字符流;

    如果需要处理的内容是二进制内容,推荐使用字节流;

8、常识:

    计算机的文件分为:文本文件、二进制文件(实质是:计算机中所有的文件均为二进制文件,当二进制文件恰好被解析成字符时,就成了文本文件)

    【文本文件】:

      二进制文件能被解析成字符的文件称为文本文件;

    【二进制文件】:

      二进制文件不能被解析成字符的文件;

9、转换流:

    1.1  InputStreamReader:  将字节输入流转换为字符输入流;

    1.2  OutputStreamWriter:  将字节输出流转换为字符输出流;

    

9、IO流体系

          

 

posted on 2019-01-18 10:45  anpeiyong  阅读(172)  评论(0编辑  收藏  举报

导航