黑马程序员——Java IO总结(二)

来源:互联网 发布:伦敦陷落 知乎 编辑:程序博客网 时间:2024/04/30 07:58


黑马程序员——Java IO总结(二)


---------------------- android培训java培训、期待与您交流! ----------------------


一、字符流的缓冲区

l  缓冲区的出现提高了对数据的读写效率

l  对应类

  BufferedWriter

  BufferedReader

l  缓冲区要结合流才可以使用。

l  在流的基础上对流的功能进行了增强。

 

l  实例:字符写入流缓冲区实例

import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;public class BufferedWriterDemo {public static void main(String[] args) throws IOException {FileWriter writer = new FileWriter("buffer.txt");// 为了提高字符写入效率,加入了缓冲技术BufferedWriter br = new BufferedWriter(writer);br.write("中国");br.newLine(); // 插入跨平台的换行符br.write("Java技术");// 只要用到缓冲区,就要记得刷新br.flush();// 其实关闭缓冲区,就是关闭缓冲区中的流对象br.close();}}


l  实例:字符读取流缓冲区实例

import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException; public class BufferedReaderDemo {    public static void main(String[] args) throws IOException {        FileReader reader = new FileReader("buffer.txt");         BufferedReader br = new BufferedReader(reader);         String line = null;         while ((line = br.readLine()) != null) {            System.out.println(line);        }               br.close();    }}



l  实例:通过缓冲区复制文本文件

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException; public class TextFileCopyBuf {    public static void main(String[] args) {        BufferedReader br = null;        BufferedWriter bw = null;         try {            br = new BufferedReader(new FileReader("buffer.txt"));            bw = new BufferedWriter(new FileWriter("d:\\buffer.txt"));             String line = null;             while ((line = br.readLine()) != null) {                bw.write(line);                bw.newLine();                bw.flush();            }        } catch (Exception e) {            throw new RuntimeException("文件读写失败!");        } finally {            try {                if (br != null)                    br.close();            } catch (IOException e) {                throw new RuntimeException("读取关闭失败!");            }            try {                if (bw != null)                    bw.close();            } catch (IOException e) {                throw new RuntimeException("写入关闭失败!");            }        }    }}



l  装饰设计模式

         当想要对已有的对象进行增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能,那么自定义的类称为装饰类。

l  实例:模拟一个带行号的缓冲区对象

import java.io.FileReader;import java.io.IOException;import java.io.Reader; public class MyLineNumberReader {    private Reader r;    private int lineNumber;     public MyLineNumberReader(Reader r) {        super();        this.r = r;    }     public int getLineNumber() {        return lineNumber;    }     public void setLineNumber(int lineNumber) {        this.lineNumber = lineNumber;    }     public String readLine() throws IOException {        StringBuilder sb = new StringBuilder();         lineNumber++;        int ch = 0;         while ((ch = r.read()) != -1) {            if (ch == '\r')                continue;            else if (ch == '\n')                return sb.toString();            else                sb.append((char) ch);        }         if (sb.length() > 0)            return sb.toString();         return null;    }     public void close() throws IOException {        r.close();    }     public static void main(String[] args) throws IOException {        FileReader r = new FileReader("FileReaderDemo_copy.java");        MyLineNumberReader lnr = new MyLineNumberReader(r);         String line = null;         lnr.setLineNumber(100);        while ((line = lnr.readLine()) != null) {            System.out.println(lnr.getLineNumber() + ": " + line);        }         lnr.close();    }}



二、字节流操作

l  字节流基类:InputStream、OutputStream

l  实例:字节流的读写

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException; public class FileOutputStreamDemo {    public static void main(String[] args) throws IOException {        // writeFile();        readFile3();    }     public static void readFile1() throws IOException {        FileInputStream fis = new FileInputStream("fos.txt");         int ch = 0;         while ((ch = fis.read()) != -1) {            System.out.print((char) ch);        }         fis.close();    }     public static void readFile2() throws IOException {        FileInputStream fis = new FileInputStream("fos.txt");         int len = 0;        byte[] buf = new byte[1024];         while ((len = fis.read(buf)) != -1) {            System.out.println(new String(buf, 0, len));        }         fis.close();    }       public static void readFile3() throws IOException {        FileInputStream fis = new FileInputStream("fos.txt");               byte[] buf=new byte[fis.available()];               fis.read(buf);        System.out.println(new String(buf));               fis.close();    }     public static void writeFile() throws IOException {        FileOutputStream fos = new FileOutputStream("fos.txt");         fos.write("HelloWorld".getBytes());         fos.close();    }}



l  实例:复制图片

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException; // 复制图片public class CopyPic {    public static void main(String[] args) {        FileOutputStream fos = null;        FileInputStream fis = null;         try {            fis = new FileInputStream("c:\\a.jpg");            fos = new FileOutputStream("c:\\b.jpg");             byte[] buf = new byte[1024];            int len = 0;             while ((len = fis.read(buf)) != -1) {                fos.write(buf, 0, len);            }         } catch (Exception e) {            throw new RuntimeException(e);        } finally {            try {                if (fis != null)                    fis.close();            } catch (IOException e) {                e.printStackTrace();            }            try {                if (fos != null)                    fos.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}


l  实例:通过缓冲区复制mp3文件

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException; public class CopyMp3 {    public static void main(String[] args) throws IOException {        long start = System.currentTimeMillis();        copy_1();        long end = System.currentTimeMillis();         System.out.println(end - start);    }     // 通过字节流的缓冲区完成复制    public static void copy_1() throws IOException {        BufferedInputStream bufis = new BufferedInputStream(                new FileInputStream("d:/1.mp3"));        BufferedOutputStream bufos = new BufferedOutputStream(                new FileOutputStream("d:/1_copy.mp3"));         int b = 0;         while ((b = bufis.read()) != -1) {            bufos.write(b);        }         bufis.close();        bufos.close();    }  }


l  实例:读取键盘录入

import java.io.IOException;import java.io.InputStream; public class ReadIn {    public static void main(String[] args) throws IOException {        InputStream in = System.in;        StringBuilder sb = new StringBuilder();         while (true) {            int ch = in.read();            if (ch == '\r')                continue;            else if (ch == '\n') {                String s = sb.toString();                sb.delete(0, sb.length());                if ("over".equals(s))                    break;                System.out.println(s);                continue;            }            sb.append((char) ch);        }    }}


l  实例:读取键盘录入(使用转换流InputStreamReader)

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader; public class ReadIn {    public static void main(String[] args) throws IOException {        InputStream in = System.in;         BufferedReader br = new BufferedReader(new InputStreamReader(in));         String line = null;         while ((line = br.readLine()) != null) {            if ("over".equals(line)) {                break;            }            System.out.println(line);        }    }}



---------------------- android培训、java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima