其他分享
首页 > 其他分享> > IO流的分类举例

IO流的分类举例

作者:互联网

一、FileInputStream

方法

说明

int available()

返回可以从该输入流不阻塞地读取(或跳过)的字节数的估计值,该值可能为0,或当检测到流的结束时为0

int read()

向流中写一个字符

int read​(byte[] b)

将多个字节读到 b 数组中

int read​(byte[] b, int off, int len)

读取流中的多个字节并填充到数组中指定位置中

void reset()

重置流

log skip​(long n)

跳过多个字符

void close()

关闭流

public class TestFile {
    public static void main(String[] args) {
        //读取temp.txt文件内容
        //流使用后 一定要关闭!!!写在finally中
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("D:\\Lession\\Java2113\\temp.txt");
            int temp = 0;
            while((temp = fis.read())!=-1) {
                System.out.println(temp);
            }
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        }
    }
}

read(byte[ ] b) : 读取内容到byte[ ]中,结果是读取字节的个数,如果没有读取到字节返回-1

public static void main(String[] args) {
        //读哪个文件
        FileInputStream fis = null;
        /*File file = new File("D:\\Lession\\Java2113\\temp.txt");
        try {
            fis = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/
        try {
            fis = new FileInputStream("D:\\Lession\\Java2113\\temp.txt");
            //读取一个字节,返回字节的unicode值
            //fis.read();
            //读取到byte[]中,返回读取的长度
            //fis.read(byte[] b);
            //读取到byte[]中,指定byte数组的位置
            //fis.read(byte[] b, int off, int len)
            /* System.out.println((char)fis.read());
            System.out.println(fis.read());
            System.out.println(fis.read());
            System.out.println(fis.read());
            System.out.println(fis.read()); //-1
            */ /*int temp = 0;
            while((temp=fis.read())!=-1) {
                System.out.println((char)temp);
            }*/
            //缓冲区
            byte[] bytes = new byte[10];
            int temp = 0;
            while((temp=fis.read(bytes))!=-1) {
                for(int i = 0;i<temp;i++) {
                    System.out.println((char)bytes[i]);
                }
            }
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        }
    }

 缓冲:如同生活中,将书从一个教室搬往另一个教室,若一本一本地去搬会很慢,也很累,例如int read()方法的使用;

而如果有一个书包作为搬运工具,将教室里的书装到书包中进行搬运会较快,有一个向书包中装书的缓冲过程,例如,int read​(byte[ ] b)方法的使用

读中文

public static void main(String[] args) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("D:\\Lession\\Java2113\\temp.txt");
            byte[] bytes = new byte[fis.available()];
            int temp = 0;
            if((temp=fis.read(bytes))!=-1) {
                System.out.println(new String(bytes,"UTF-8"));
            }
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        }
    }

二、FileOutputStream

方法

说明

void write​(byte b)

向流中写一个字节

void write​(byte[] str)

向流中写一个字节数组

void write​(byte[] b, int off, int len)

向流中写入字节数组的一部分

void flush()

刷新流

void close()

关闭流

构造器:

FileOutputStream(File file) 默认从开头新加内容,覆盖

FileOutputStream(File file,boolean append) 从末尾追加内容

public class TestFileOutputStream {
    public static void main(String[] args) {
        //向temp.txt中写 abcd
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("D:\\Lession\\Java2113\\temp.txt");
            fos.write("阿伯测的".getBytes());
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
    }
}

应用:将一个文件复制到另一个文件

 public static void copy1(String srcPath,String destPath) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        byte[] bytes = new byte[1024];
        try {
            fis = new FileInputStream(srcPath);
            fos = new FileOutputStream(destPath);
            int temp = 0;
            while ((temp = fis.read(bytes)) != -1) {
                fos.write(bytes, 0, temp);
            }
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
            try {
                fos.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        }
    }

三、BufferedInputStream/BufferedOutputStream

•此流是一个处理流,是一个带缓冲区的字节输出流。 •BufferedOutputStream 可以减少IO次数。
public static void copy2(String srcPath,String destPath) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            fis = new FileInputStream(srcPath);
            fos = new FileOutputStream(destPath);
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos,1024);
            int temp = 0;
            while((temp=bis.read())!=-1) {
                //缓冲流 默认是缓冲区满时,向设备输出
                bos.write(temp);
            }
            //手动冲刷缓冲区向设备输出
            bos.flush();//冲刷,将最后不足1024的部分进行读取
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }finally {
            try {
                bis.close();
            } catch (IOException e1) {

                e1.printStackTrace();
            }
            try {
                bos.close();
            } catch (IOException e1) {

                e1.printStackTrace();
            }
            try {
                fis.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

最后需要flush一下!!!

四、FileReader和FileWriter

Reader和Writer的子类,都是字符流

public class TestFileReader {
    public static void main(String[] args) {
        FileReader fr = null;
        try {
            fr = new FileReader("D:\\Lession\\Java2113\\temp1.txt");
            int temp = 0;
            char[] chars = new char[2];
            while((temp=fr.read(chars))!=-1) {
                for(char c:chars) {
                    System.out.println(c);
                }
            }
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
    }
}
public class TestFileWriter {
    public static void main(String[] args) {
    try {
        FileWriter fw = new FileWriter("D:\\Lession\\Java2113\\temp1.txt");
        fw.write("你好中国");
        fw.flush();
    } catch (IOException e) {

        e.printStackTrace();
        }
    }
}

五、BufferedReader 和 BufferedWriter

BufferedReader 提供了按行读的功能

BufferedWriter 提供了自定义缓冲区大小的功能

FileReader fr = null;
    try {
        fr = new FileReader("D:\\Lession\\Java2113\\temp1.txt");
        BufferedReader br = new BufferedReader(fr);
        String str = null;
        while((str=br.readLine())!=null) {
            System.out.println(str);
        }
    } catch (FileNotFoundException e) {

        e.printStackTrace();
    } catch (IOException e) {

        e.printStackTrace();
    }
        
    try {
        FileWriter fw = new FileWriter("D:\\Lession\\Java2113\\temp1.txt");
        BufferedWriter br = new BufferedWriter(fw,1024);
        br.write("你好北京");
        br.flush();
    } catch (IOException e) {

        e.printStackTrace();
        }

六、InputStreamReader和OutputStreamWriter (转换流)

都是字符流 继承于Reader和Writer , 是字节流转成字符流的桥梁

public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("D:\\Lession\\Java2113\\temp.txt");
            InputStreamReader reader = new InputStreamReader(fis,"UTF-8");
            int temp = 0;
            while((temp=reader.read())!=-1) {
                System.out.println((char)temp);
            }
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
    }
public static void main(String[] args) {
        try {
            FileOutputStream fos = new FileOutputStream("D:\\Lession\\Java2113\\temp1.txt");
            /*fos.write("你好北京".getBytes());*/
            OutputStreamWriter osw = new OutputStreamWriter(fos);
            osw.write("你好北京");
            osw.flush();
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
    }

七、PrintWriter

public static void main(String[] args) {
        PrintWriter pw = null;
        try {
            FileOutputStream fos = new FileOutputStream("D:\\Lession\\Java2113\\temp1.txt");
            pw = new PrintWriter(fos,true);
            pw.println("你好北京");
            pw.println("你好冬奥会");
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        }
    }

八、DataInputStream和DataOutputStream

读写数据(基本类型数据)的字节流

try {
    FileOutputStream fos = new FileOutputStream("D:\\Lession\\Java2113\\temp1.txt");
    DataOutputStream dos = new DataOutputStream(fos);
    dos.writeInt(1);
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
public static void main(String[] args) {
    try {
        FileInputStream fis = new FileInputStream("D:\\Lession\\Java2113\\temp1.txt");
        DataInputStream dis = new DataInputStream(fis);
        System.out.println(dis.readInt());
    } catch (IOException e) {

        e.printStackTrace();
    }
}

标签:fis,temp,分类,try,printStackTrace,举例,IO,catch,new
来源: https://blog.csdn.net/aigo_2021/article/details/122869895