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) {
            
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM