zoukankan      html  css  js  c++  java
  • 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) {
                
            }
        }
    }
  • 相关阅读:
    Thinkphp3.2 PHPMailer 发送邮件
    13 代理模式
    12 状态模式
    11 组合模式
    10 迭代器模式
    9 模板方法模式
    8 外观模式
    MySQL Network--Localhost与127.0.0.1的差异
    MySQL Memory--内存分配相关参数
    mysqldump命令之single-transaction
  • 原文地址:https://www.cnblogs.com/lyxcode/p/9448156.html
Copyright © 2011-2022 走看看