Java-字元流

weixin_34007291發表於2018-05-15

InputStreamReader

package cn.itcast.demo;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/*
 *  轉換流
 *    java.io.InputStreamReader 繼承 Reader
 *    字元輸入流,讀取文字檔案
 *    
 *    位元組流向字元的敲了,將位元組流轉字元流
 *    
 *    讀取的方法:
 *       read() 讀取1個字元,讀取字元陣列
 *    
 *    技巧:  OuputStreamWriter寫了檔案
 *    InputStreamReader讀取檔案
 *    
 *    OuputStreamWriter(OuputStream out)所有位元組輸出流
 *    InputStreamReader(InputStream in) 接收所有的位元組輸入流
 *      可以傳遞的位元組輸入流: FileInputStream
 *    InputStreamReader(InputStream in,String charsetName) 傳遞編碼表的名字
 */
public class InputStreamReaderDemo {
    public static void main(String[] args) throws IOException {
//      readGBK();
        readUTF();
    }
    /*
     *  轉換流,InputSteamReader讀取文字
     *  採用UTF-8編碼表,讀取檔案utf
     */
    public static void readUTF()throws IOException{
        //建立自己輸入流,傳遞文字檔案
        FileInputStream fis = new FileInputStream("c:\\utf.txt");
        //建立轉換流物件,構造方法中,包裝位元組輸入流,同時寫編碼表名
        InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
        char[] ch = new char[1024];
        int len = isr.read(ch);
        System.out.println(new String(ch,0,len));
        isr.close();
    }
    /*
     *  轉換流,InputSteamReader讀取文字
     *  採用系統預設編碼表,讀取GBK檔案
     */
    public static void readGBK()throws IOException{
        //建立自己輸入流,傳遞文字檔案
        FileInputStream fis = new FileInputStream("c:\\gbk.txt");
        //建立轉換流物件,構造方法,包裝位元組輸入流
        InputStreamReader isr = new InputStreamReader(fis);
        char[] ch = new char[1024];
        int len = isr.read(ch);
        System.out.println(new String(ch,0,len));
        
        isr.close();
    }
}

OutputStreamWriter

package cn.itcast.demo;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/*
 *  轉換流
 *    java.io.OutputStreamWriter 繼承Writer類
 *    就是一個字元輸出流,寫文字檔案
 *    write()字元,字元陣列,字串
 *    
 *    字元通向位元組的橋樑,將字元流轉位元組流
 *    
 *    OutputStreamWriter 使用方式
 *     構造方法:
 *       OutputStreamWriter(OuputStream out)接收所有的位元組輸出流
 *       但是: 位元組輸出流:  FileOutputStream
 *       
 *      OutputStreamWriter(OutputStream out, String charsetName)
 *      String charsetName 傳遞編碼表名字 GBK  UTF-8 
 *      
 *      OutputStreamWriter 有個子類,  FileWriter
 */
public class OutputStreamWriterDemo {
    public static void main(String[] args)throws IOException {
//      writeGBK();
        writeUTF();
    }
    /*
     * 轉換流物件OutputStreamWriter寫文字
     * 採用UTF-8編碼表寫入
     */
    public static void writeUTF()throws IOException{
        //建立位元組輸出流,繫結檔案
        FileOutputStream fos = new FileOutputStream("c:\\utf.txt");
        //建立轉換流物件,構造方法保證位元組輸出流,並指定編碼表是UTF-8
        OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
        osw.write("你好");
        osw.close();
    }
    
    /*
     * 轉換流物件 OutputStreamWriter寫文字
     * 文字採用GBK的形式寫入
     */
    public static void writeGBK()throws IOException{
        //建立位元組輸出流,繫結資料檔案
        FileOutputStream fos = new FileOutputStream("c:\\gbk.txt");
        //建立轉換流物件,構造方法,繫結位元組輸出流,使用GBK編碼表
        OutputStreamWriter osw = new OutputStreamWriter(fos);
        //轉換流寫資料
        osw.write("你好");
        
        osw.close();
    }
}

BufferedInputStream

package cn.itcast.demo1;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

/*
 *  位元組輸入流的緩衝流
 *    java.io.BufferedInputStream 
 *     繼承InputStream,標準的位元組輸入流
 *     讀取方法  read() 單個位元組,位元組陣列
 *    
 *    構造方法:
 *      BufferedInputStream(InputStream in)
 *      可以傳遞任意的位元組輸入流,傳遞是誰,就提高誰的效率
 *      可以傳遞的位元組輸入流 FileInputStream
 */
public class BufferedInputStreamDemo {
    public static void main(String[] args) throws IOException{
        //建立位元組輸入流的緩衝流物件,構造方法中包裝位元組輸入流,包裝檔案
        BufferedInputStream bis = new 
                BufferedInputStream(new FileInputStream("c:\\buffer.txt"));
        byte[] bytes = new byte[10];
        int len = 0 ;
        while((len = bis.read(bytes))!=-1){
            System.out.print(new String(bytes,0,len));
        }
        bis.close();
    }
}

BufferedOutputStream

package cn.itcast.demo1;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 *  位元組輸出流的緩衝流
 *   java.io.BufferedOuputStream 作用: 提高原有輸出流的寫入效率
 *   BufferedOuputStream 繼承 OutputStream
 *   方法,寫入 write 位元組,位元組陣列
 *   
 *   構造方法:
 *     BufferedOuputStream(OuputStream out)
 *     可以傳遞任意的位元組輸出流, 傳遞的是哪個位元組流,就對哪個位元組流提高效率
 *     
 *     FileOutputSteam
 */
public class BufferedOutputStreamDemo {
    public static void main(String[] args)throws IOException {
        //建立位元組輸出流,繫結檔案
        //FileOutputStream fos = new FileOutputStream("c:\\buffer.txt");
        //建立位元組輸出流緩衝流的物件,構造方法中,傳遞位元組輸出流
        BufferedOutputStream bos = new
                BufferedOutputStream(new FileOutputStream("c:\\buffer.txt"));
        
        bos.write(55);
        
        byte[] bytes = "HelloWorld".getBytes();
        
        bos.write(bytes);
        
        bos.write(bytes, 3, 2);
        
        bos.close();
    }
}

BufferedReader

package cn.itcast.demo2;

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

/*
 *  字元輸入流緩衝流
 *    java.io.BufferedReader 繼承 Reader
 *    讀取功能 read() 單個字元,字元陣列
 *    構造方法:
 *      BufferedReader(Reader r)
 *      可以任意的字元輸入流
 *         FileReader  InputStreamReader
 *         
 *     BufferedReader自己的功能
 *     String readLine() 讀取文字行 \r\n
 *     
 *     方法讀取到流末尾,返回null
 *     小特點:
 *       獲取內容的方法一般都有返回值
 *       int 沒有返回的都是負數
 *       引用型別 找不到返回null
 *       boolean 找不到返回false
 *       
 *       String s = null
 *       String s ="null"
 *       
 *       readLine()方法返回行的有效字元,沒有\r\n
 */
public class BufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        int lineNumber = 0;
        //建立字元輸入流緩衝流物件,構造方法傳遞字元輸入流,包裝資料來源檔案
        BufferedReader bfr = new BufferedReader(new FileReader("c:\\a.txt"));
        //呼叫緩衝流的方法 readLine()讀取文字行
        //迴圈讀取文字行, 結束條件 readLine()返回null
        String line = null;
        while((line = bfr.readLine())!=null){
            lineNumber++;
            System.out.println(lineNumber+"  "+line);
        }
        bfr.close();
    }
}

/*
 * String line = bfr.readLine();
        System.out.println(line);
        
        line = bfr.readLine();
        System.out.println(line);
        
        line = bfr.readLine();
        System.out.println(line);
        
        line = bfr.readLine();
        System.out.println(line);
        
        line = bfr.readLine();
        System.out.println(line);
 */

BufferedWriter

package cn.itcast.demo2;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/*
 *   字元輸出流緩衝區流
 *     java.io.BufferedWriter 繼承 Writer
 *     寫入方法 write () 單個字元,字元陣列,字串
 *     
 *     構造方法:
 *       BufferedWriter(Writer w)傳遞任意字元輸出流
 *       傳遞誰,就高效誰
 *         能傳遞的字元輸出流 FileWriter, OutputStreamWriter
 *         
 *    BufferedWriter 具有自己特有的方法
 *      void  newLine() 寫換行
 *      
 *       newLine()文字中換行, \r\n也是文字換行
 *       方法具有平臺無關性
 *       Windows  \r\n
 *       Linux    \n
 *       
 *       newLine()執行結果,和作業系統是相互關係
 *       JVM: 安裝的是Windows版本,newLine()寫的就是\r\n
 *            安裝的是Linux版本,newLine()寫的就是\n
 */
public class BufferedWrierDemo {
    public static void main(String[] args) throws IOException{
        //建立字元輸出流,封裝檔案
        FileWriter fw = new FileWriter("c:\\buffer.txt");
        BufferedWriter bfw = new BufferedWriter(fw);
        
        bfw.write("你好");
        bfw.newLine();
        bfw.flush();
        
        
        bfw.write("我好好");
        bfw.newLine();
        bfw.flush();

        bfw.write("大家都好");
        bfw.flush();
        
        bfw.close();
        
    }
}

/*
 *      
        bfw.write(100);
        bfw.flush();
        
        bfw.write("你好".toCharArray());
        bfw.flush();*/

Copy

package cn.itcast.copy;

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

/*
 *  檔案複製方式,位元組流,一共4個方式
 *  1. 位元組流讀寫單個位元組                    125250 毫秒
 *  2. 位元組流讀寫位元組陣列                    193    毫秒  OK
 *  3. 位元組流緩衝區流讀寫單個位元組     1210   毫秒
 *  4. 位元組流緩衝區流讀寫位元組陣列     73     毫秒  OK
 */
public class Copy {
    public static void main(String[] args)throws IOException {
        long s = System.currentTimeMillis();
        copy_4(new File("c:\\q.exe"), new File("d:\\q.exe"));
        long e = System.currentTimeMillis();
        System.out.println(e-s);
    }
    /*
     * 方法,實現檔案複製
     *  4. 位元組流緩衝區流讀寫位元組陣列
     */
    public static void copy_4(File src,File desc)throws IOException{
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desc));
        int len = 0 ;
        byte[] bytes = new byte[1024];
        while((len = bis.read(bytes))!=-1){
            bos.write(bytes,0,len);
        }
        bos.close();
        bis.close();
    }
    /*
     * 方法,實現檔案複製
     *  3. 位元組流緩衝區流讀寫單個位元組
     */
    public static void copy_3(File src,File desc)throws IOException{
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desc));
        int len = 0 ;
        while((len = bis.read())!=-1){
            bos.write(len);
        }
        bos.close();
        bis.close();
    }
    
    /*
     * 方法,實現檔案複製
     *  2. 位元組流讀寫位元組陣列
     */
    public static void copy_2(File src,File desc)throws IOException{
        FileInputStream fis = new FileInputStream(src);
        FileOutputStream fos = new FileOutputStream(desc);
        int len = 0 ;
        byte[] bytes = new byte[1024];
        while((len = fis.read(bytes))!=-1){
            fos.write(bytes,0,len);
        }
        fos.close();
        fis.close();
    }
    
    /*
     * 方法,實現檔案複製
     *  1. 位元組流讀寫單個位元組
     */
    public static void copy_1(File src,File desc)throws IOException{
        FileInputStream fis = new FileInputStream(src);
        FileOutputStream fos = new FileOutputStream(desc);
        int len = 0 ;
        while((len = fis.read())!=-1){
            fos.write(len);
        }
        fos.close();
        fis.close();
    }
}

Copy1

package cn.itcast.copy;

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

/*
 *  使用緩衝區流物件,複製文字檔案
 *  資料來源  BufferedReader+FileReader 讀取
 *  資料目的 BufferedWriter+FileWriter 寫入
 *  讀取文字行, 讀一行,寫一行,寫換行
 */
public class Copy_1 {
    public static void main(String[] args) throws IOException{
        BufferedReader bfr = new BufferedReader(new FileReader("c:\\w.log"));   
        BufferedWriter bfw = new BufferedWriter(new FileWriter("d:\\w.log"));
        //讀取文字行, 讀一行,寫一行,寫換行
        String line = null;
        while((line = bfr.readLine())!=null){
            bfw.write(line);
            bfw.newLine();
            bfw.flush();
        }
        bfw.close();
        bfr.close();
    }
}

相關文章