IO流——常用IO流详解

1:字节流

  字节流:用于处理以字节为单位的二进制文件(如音乐,图片等)

  InputStream 是抽象类 它的对应子类FileInputStream可以被实例化

  构造方法:

             FileInputStream常用构造方法:

                 FileInputStream(File file) :通过File对象创建FileInputStream对象。                                             

            FileInputStream(String name) :通过文件(非“目录”)路径创建FileInputStream对象。

  常用方法:

            int read():从输入流中读取单个字节的数据;如果已到达文件末尾,则返回 -1。

            int read(byte[] b):从输入流中将最多b.length个字节的数据读入一个byte数组中,以整数形 式返回存入数组中的实际字节个数;如果已到达文件末尾,则返回 -1。                           void close():关闭此文件输入流并释放与此流有关的所有系统资源

OutputStream是抽象类,它的子类FileOutputStream可以被实例化

  构造方法:   

                            FileOutputStream(File file) :通过File对象创建FileOutputStream对象。                                       

                               FileOutputStream(String name) :通过文件(非“目录”)路径创建 FileOutputStream对象。 

                               FileOutputStream(File file, boolean append):通过File对象创建 FileOutputStream对象;第二个参数如果为true ,则字节将被写入文件的末尾而不是开头

  常用方法:

           FileOutputStream常用方法: 

                          void write(int b):将指定的单个字节数据写入此文件输出流。

                            void write(byte[] b, int off, int len):将byte数组中从off开始的len个字节写入此文件输出流。

                             void flush():刷新字节输出流并强制写出缓冲内所有字节数据。

                             void close():关闭此文件输出流并释放与此流有关的所有系统资源。

 
package com.xt.io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileInputStreamTest {

    public static void main(String[] args) {
        FileInputStream fis=null;
        FileOutputStream fos=null;
        try {
            /**
             * 读和写都是站在程序的角度来看的,读文件用FileInputStream  写文件用FileOutPutStream
             */
            fis=new FileInputStream("C:\\中心.jpg");
            fos=new FileOutputStream("D:\\重要.jpg");
            //第一种方法:一个字节一个字节的读
            /*int date;
            while((date=fis.read())!=-1) {
                System.out.println(date);
            }*/
            //第二种方法:1024个字节1024个字节的读
            byte[] bufferDate=new byte[1024];
            int length;
            while((length=fis.read(bufferDate))!=-1) {
                fos.write(bufferDate, 0, length);
            }
            fos.flush();//强制全部读出来所有的数据
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //释放资源
            if(fos!=null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
            if(fis!=null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
 

 

          1.1:缓冲字节流

  缓冲输入流:BufferedInputStream      BufferedInputStream(InputStream in):

  缓冲输出流:BufferedOutputStream  BufferedOutputStream(OutputStream out)

 
package com.xt.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferInputStreamTest {

    public static void main(String[] args) {
        try {
            BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream("C:\\中心.jpg"));
            BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("D:\\重要k.jpg"));
        
            /*int b;
            while((b=bufferedInputStream.read())!=-1) {
                bufferedOutputStream.write(b);
            }*/
            
            byte[] bufferByte=new byte[1024];
            int length;
            while((length=bufferedInputStream.read(bufferByte))!=-1) {
                bufferedOutputStream.write(bufferByte, 0, length);
            }
            bufferedOutputStream.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
 

 

 

2:字符流

    Reader是抽象类,它的子类FileReader 可以被实例化

  构造方法:   

              FileReader常用构造方法: FileReader(File file) :通过File对象创建FileReader对象。

                 FileReader(String fileName) :通过文件(非“目录”)路径创建FileReader对象。

 

  常用方法:

        FileReader常用方法: int read():从输入流中读取单个字符的数据,如果已到达流的末尾,则返回 -1 。

                   int read(char[] cbuf):从输入流中将最多cbuf.length个字符的数据读入一个char数组中,以整数形式返回存入

                       数组中的实际字节个数,如果已到达流的末尾,则返回 -1 。

                   void close():关闭此文件输入流并释放与此流有关的所有系统资源。

  Writer是抽象类,它的子类FileWriter可以被实例化

  构造方法:

 

      FileWriter(File file) :通过File对象创建FileWriter对象。

            FileWriter(String fileName) :通过文件(非“目录”)路径创建FileWriter对象。

             FileWriter(File file, boolean append):通过File对象创建FileWriter对象;第二个参数如果为true ,则字节将被写入文件的末尾而不是开头。

 

  常用方法:

 

      void write(int c):将指定的单个字符数据写入此文件输出流。

       void write(char[] cbuf, int off, int len):将char数组中从off开始的len个字符写入此文件输出流。

        void flush():刷新字符输出流缓冲。

       void close():关闭此文件输出流并释放与此流有关的所有系统资源。

 
package com.xt.io;

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

class FileReaderAndFileWriter {

    public static void main(String[] args) {
        Reader reader=null;
        Writer writer=null;
        try {
            reader=new FileReader("C:\\unintall.log");
            writer=new FileWriter("D:\\unintall.log");
            
            char[] buffer=new char[1024];
            int length;
            while((length=reader.read(buffer))!=-1) {
                writer.write(buffer, 0, length);
            }
            writer.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                if(writer!=null) {
                    writer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(reader!=null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        
    }
}
 

 

 

2.1:缓冲字符流

  BufferedReader:缓冲字符输入流      BufferedReader(Reader in):

  BufferedWriter :缓冲字符输出流 BufferedWriter(Writer out)

 
package com.xt.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferReaderTest {

    public static void main(String[] args) {
        try {
            BufferedReader bufferedReader =new BufferedReader(new FileReader("C:\\unintall.log"));
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\unintall.log"));
            
            //第一种方法
//            int date;
//            while((date=bufferedReader.read())!=-1) {
//                bufferedWriter.write(date);
//            }
//            bufferedWriter.flush();
//            
//            
            //第二种方法
            char[] bufferDate=new char[1024];
            int length;
            while((length=bufferedReader.read(bufferDate))!=-1) {
                bufferedWriter.write(bufferDate, 0, length);
            }
            bufferedWriter.flush();
            
            
            //第三种方法
//            String lineDate;
//            while((lineDate=bufferedReader.readLine())!=null) {
//                bufferedWriter.write(lineDate);
//                bufferedWriter.newLine();
//            }
//            bufferedWriter.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 

 

3:转换流

转化只能是字节向字符转化

  InputStreamReader(Reader in)  

  OutputStreamWriter(Writer out)

因为InputStreamReader是Reader的子类,所以同样可以用缓冲字符流BufferedReader(new InputStreamReader(Reader in))

t同理

 
package com.xt.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class InputStreamReaderTest {

    public static void main(String[] args) {
        try {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\aa.txt"),"UTF-8"));
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\bb.txt"), "UTF-8"));
            String lineDate;
            while((lineDate=bufferedReader.readLine())!=null) {
                bufferedWriter.write(lineDate);
                bufferedWriter.newLine();
            }
            bufferedWriter.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 

 

 

 

数据流

 

 
package com.xt.io;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataInputStreamTest {

    public static void main(String[] args) {
        double[] scores = {20,50,42,62};
        DataOutputStream dataOutputStream=null ;
        try {
            dataOutputStream = new DataOutputStream(new FileOutputStream("D:\\data.data")) ;
            for (double score : scores) {
                dataOutputStream.writeDouble(score);
            }
            dataOutputStream.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(dataOutputStream!=null) {
                try {
                    dataOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
        
        try {
            DataInputStream dataInputStream=new DataInputStream(new FileInputStream("D:\\data.data"));
            while(true) {
                System.out.println(dataInputStream.readDouble());
            }
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }catch(Exception e) {
            
        }
    }
}

 

posted @ 2019-07-02 10:14  xiaoshen666  阅读(477)  评论(1编辑  收藏  举报