Java常用IO流

字节流

FileInputStream 字节输入流

常用方法:
int read(byte[] b,int off ,int len) 返回读取的长度,读取失败返回-1。最多读取len个字节,读来的数据存放在b中,从第b[off]个开始存放。

FileOutputStream 字节输出流

常用方法:
void write(byte[] b,int off ,int len); 写入len个字节到文件中去, 数据来自b,从第b[off]个开始取。 flush(); 刷新此输出流并强制任何缓冲的输出字节被写出。

BufferedInputStream 缓冲字节输入流,为装饰流,需要依赖节点流存在。(默认缓冲大小为8k)

BufferedOutputStream 缓冲字节输出流。

拷贝文件:

/**
     * 拷贝文件,缓冲字节流实现
     * @param srcPath   数据源文件地址
     * @param destPath  目的地文件地址,包含文件名。
     */
    static void copyFile(String srcPath,String destPath){
        //jdk7以后支持自动释放io资源
        try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(srcPath)));
            //不为追加模式
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(destPath),false));){

            byte[] flush = new byte[1024];//缓存字节数组,作为中间储存器
            int leng  = -1;//读到的长度

            //把数据从输入流中读到字节数组中,并且判断是否结束
            while((leng=bis.read(flush))!=-1){
                bos.write(flush,0,leng);//把字节数组里的数据写到文件中去
            }
            bos.flush();//刷新缓冲区域
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

字符流

FileRead 字符输入流,读取内容为字符的文件。

常用方法:
readLine()   返回读取到的一行数据,读到结尾返回null。

FileWriter 字符输出流,写出字符到文件中。

常用方法:void write(String s)         直接写入一串字符串。
void newLine()         写入换行符。 Writer appnd(String s);    追加写入,返回对象本身,所以可以一直追加appnd(String s).appnd(String s).appnd(String s); flush();          刷新此输出流并强制任何缓冲的输出字节被写出。

BufferedReader 缓冲字符输入流,装饰类,需要依赖字符输入流存在。

BufferedWriter 缓冲字符输出流。


字节转为字符流

InputStreamReader 字节输入流转为字符输入流。

OutputStreamWriter 字节输出流转为字符输出流。

/**
     * 拷贝内容为字符的文件,缓冲字符流实现。
     * @param srcPath   数据源文件地址
     * @param destPath  目的地文件地址,包含文件名。
     */
    static void copyFile(String srcPath,String destPath){
        //jdk7以后支持自动释放io资源
        try(BufferedReader br = new BufferedReader(
                new InputStreamReader(//字节输入流转为字符输入流
                        new FileInputStream(new File(srcPath))));
            //不为追加模式
            BufferedWriter bw = new BufferedWriter(
                    new OutputStreamWriter(//字节输出流转为字符输出流
                            new FileOutputStream(new File(destPath),false)));) {
            //中间储存变量
            String temp;
            //把数据从输入流中读到字符串,并且判断是否结束
            while (null!=(temp=br.readLine())){
                bw.write(temp);//把字符串写到文件中去
                bw.newLine();
            }
            bw.flush();//刷新缓冲区域
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

对象流

ObjectOutputStream 对象的序列化流,把对象转成字节数据的输出到文件中保存,对象的输出过程称为序列化,可实现对象的持久存储。

writeObject(Object  o);    写入对象到文件中

ObjectInputStream 对象的反序列化流,读取对象。

Object  readObject();  从文件中读取对象

类要序列号需要实现Serializable接口。


数据流

DataOutputStream 数据输出流,把field写到文件中去。

writeUTF​(String str)
使用机器无关的方式使用modified UTF-8编码将字符串写入底层输出流。 

DataInputStream 数据输入流,把field从文件中读取出来。

String readUTF​()
读取以modified UTF-8格式编码的Unicode字符串的表示; 这个字符串然后作为String返回。

先写入的先读出来。


字节数组流

它们的源头和目的地为字节数组!不用关闭流。

ByteArrayInputStream(byte[]  datas);    //数据来源为字节数组
ByteArrayOutputStream();    //不需要指定目的地,目的地为内存中

可以通过toByteArray(),toString(),获取流中内容

 

关闭IO流

1.先打开的后关闭:

  例如:先开输入流,后开输出流;先关输出流,后关输出流。

2.外层流先关闭:(注意:关闭外层流会自动调用内层流的关闭)

  例如:字节缓存流依赖于字节流,关闭时,先关闭字节缓存流,后关闭字节流。不然报错。

 

 


推荐使用:commons-io组件


 

posted @ 2022-11-30 00:33  在博客做笔记的路人甲  阅读(48)  评论(0编辑  收藏  举报