黑马程序员——java--IO

来源:互联网 发布:linux日志设置 编辑:程序博客网 时间:2024/06/05 10:06

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

IO流:

如何对文件进行读写?IO(Input/Output):输入/输出    流:Stream自来水厂   家里    水流   管道Java中的文件流分为“输入流”和“输出流”,简称IO流,是对文件输入(写)输出(读)的抽象。Java.io包提供了很多接口和类支持对各种文件的读写,负责架个管道并把数据扔到管道中或从管道中得到数据

字节流和字符流:

字节流,一次读写一个字节(8位),适用于图片、音视频等文件,也包括文本文件(注意编码要跟操作系统编码保持一致)字符流,一次读写两个字节(16位),适用于文本文件、Word文件等unicode字符字节流的抽象基类:InputStream和OutputStream字符流的抽象基类:Reader和Writer字节流的抽象基类:InputStream和OutputStream    常用子类:FileInputStream和FileOutputStream字符流的抽象基类:Reader和Writer  常用子类:FileReader和FileWriter

字节输出流:

把二进制数据写到“输出流”中FileOutputStream类的常用方法:public FileOutputStream(File file)    文件不存在会自动创建public FileOutputStream(String name)    文件不存在会自动创建public FileOutputStream(File file,boolean append)public FileOutputStream(String name,boolean append)public void write(int b)     参数是ASCII表中的码值,不是普通数字public void write(byte[] b)   String对象的getBytes方法public void write(byte[] b, int off, int len)public void close()    关闭流,释放资源

字节输入流:

从“输入流”中读取二进制数据FileInputStream类常用方法:public FileInputStream(File file)   文件不存在不会自动创建public FileInputStream(String path)public int read()public int read(byte[] b)      new String(byte[] b)public void close()
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class Test05 {    /**     * @param args     */    public static void main(String[] args) {        FileInputStream fis = null;        FileOutputStream fos = null;        try {            fis = new FileInputStream("ang.gif");            fos = new FileOutputStream("ang_new02.gif");            byte ch[] = new byte[1024];            int len =0;            while ((len=fis.read(ch))!=-1) {                fos.write(ch,0,len);                }        } catch (Exception e) {            throw new RuntimeException("运行异常");        }finally{            if (fis!=null) {                try {                    fis.close();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }            if (fos!=null) {                try {                    fos.close();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }    }}
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 Test06Copy {    /**     * @param args     */    public static void main(String[] args) {        BufferedOutputStream bos = null;        BufferedInputStream bis = null;        try {            bis = new BufferedInputStream(new FileInputStream("ang.gif"));            bos = new BufferedOutputStream(new FileOutputStream("anf02.gif"));            int len = 0;            try {                while ((len=bis.read())!=-1) {                    bos.write(len);                }            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally{            if (bis!=null) {                try {                    bis.close();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }            if (bos!=null) {                try {                    bos.close();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }    }}

字符输出流:

把字符数据写到“输出流”中FileWriter类的常用方法public FileWriter(File file)public FileWriter(String fileName)public FileWriter(File file,boolean append)public FileWriter(String fileName,boolean append)public void write(String str)public void write(char[] cbuf)public void write(char[] b,int off, int len)public void flush()     //清缓冲区,强制写入,后面讲public void close()

字符输入流:

从“输入流”中读取字符数据FileReader类的常用方法:public FileReader(File file)文件不存在不会自动创建public FileReader(String path)public int read()public int read(char[] cbuf)public void close()

字符流缓冲区:

缓冲区就是内存中的一块儿区域,读写时可以先把数据放到此处,满了之后才进行真正的读写,避免了频繁读写硬盘,提高效率。字符流默认缓冲区大小是8K当使用输出流写入数据时,数据默认会先积攒到缓冲区,满了之后自动写入硬盘;没满就需要人工调用flush()或close()才会写入硬盘当使用输入流读取数据时,数据默认会尽量先读取到缓冲区,满了之后才再次从硬盘上进行读取,否则直接从缓冲区取数据

注意细节:

文件读写        不是文件夹读写IO操作必须进行异常处理和资源释放,资源释放应当放到finally代码块中try-catch最好放到最外层尽量不使用每次读写一个数据的方法read()  write(int c)注意两个read方法返回值的不同int  read()int  read(byte[] b)或read(char[] c)
import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test03 {    public static void main(String[] args) {        copy01();    }    public static void copy01(){        FileReader fr = null;        FileWriter fw = null;        try {            fr = new FileReader("test.txt");            fw= new FileWriter("test01.txt");            char[] array = new char[1024];            int len = 0;            while ((len=fr.read(array))!=-1) {                fw.write(array, 0, len);            }        } catch (FileNotFoundException e) {            System.out.println("454665");            e.printStackTrace();        } catch (IOException e) {            System.out.println("454665");            e.printStackTrace();        }finally{            try {                if (fw!=null) {                    fw.close();                }            } catch (IOException e) {                System.out.println("454665");                e.printStackTrace();            }            try {                if (fr!=null) {                    fr.close();                }            } catch (IOException e) {                System.out.println("454665");                e.printStackTrace();            }        }    }}
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Test08 {    /**     * @param args     */    public static void main(String[] args) {        BufferedReader br = null;        BufferedWriter bw = null;        try {            br = new BufferedReader(new FileReader("test01.txt"));            bw = new BufferedWriter(new FileWriter("test03.txt"));            String line = null;            while((line= br.readLine())!=null)            {                bw.write(line);                bw.newLine();                bw.flush();            }        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        try {            br.close();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        try {            bw.close();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
java.io.BufferedOutputStream    字节缓冲流(写)public BufferedOutputStream(OutputStream out)   默认大小是8kpublic BufferedOutputStream(OutputStream out,  int size)可以自己指定缓冲区大小,单位字节public void write(int b)  参数是ASCII表中的码值,不是普通数字public void write(byte[] b)public void write(byte[] b,int index,int length)public void flush()  public void close() java.io.BufferedInputStream    字节缓冲流(读)public BufferedInputStream(InputStream in)  默认缓冲区是8kpublic BufferedInputStream(InputStream out,  int size)可以自己指定缓冲区大小,单位字节public int read()public int read(byte[] b)public void close()java.io.BufferedWriter   字符缓冲流(写)public BufferedWriter(Writer out)   默认大小是8kpublic BufferedWriter(Writer out,  int sz)可以自己指定缓冲区大小,单位字节public void write(char[] cbuf)public void write(char[] cbuf,int index,int len)public void write(String str)public void newLine()   独有方法,优势是跨平台public void flush()  public void close()java.io.BufferedReader   字符缓冲流(读)public BufferedReader(Reader in)   默认大小是8kpublic BufferedReader(Reader in,  int sz)可以自己指定缓冲区大小,单位字节public int read()public int read(char[] cbuf)public String readLine()    独有方法   碰到换行或回车即一行结束public void close()
package com.lsj.test;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class Copy {    public static void main(String[] args) {        try {            FileInputStream fis = new FileInputStream("ang.gif");            FileOutputStream fos = new FileOutputStream("ang_new.gif");            byte in[] = new byte[50];            while (fis.read(in) != -1) {                fos.write(in);            }            fis.close();            fos.close();            System.out.println("done");        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
package com.lsj.test;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class test {    public static void main(String[] args) {    File file = new File("tes.txt");    try {        FileInputStream fis = new FileInputStream(file);        byte input[] = new byte[6];        fis.read(input);        String inputString = new String(input, "UTF-8");        System.out.println(inputString);    } catch (FileNotFoundException e) {        // TODO Auto-generated catch block        e.printStackTrace();    } catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    }}

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

0 0
原创粉丝点击