关于IO流那些事

1、什么叫io流,io流需要掌握哪些方法

2、十五个常见的流类

3、File类的一些方法

本人学习JavaSe也快有一年了,回顾之前学习IO流的时候,有些地方没搞懂,这段时间在家里回顾复习了一下,写下此篇博客,少年易学老难成,一寸光阴不可轻,这是我的第一篇博客,写的不好的地方,请前辈指正,更详细内容请去哔哩哔哩搜索:北京动力节点,杜聚宾先生讲的JAVASE(老杜有十五年的JAVA开发经验,一流的老程序员了)与大家一起进步,共勉之,多谢。

IO流,就是InputStream和OutputStream单词首字母的缩写,输入和输出的字节流操作,流(水流)数据的流动。

流又可细分为四类

根据种类可分字节流和字符流,根据方法可分输入流和输出流,

看一个流是字节流还是字符流,看它的单词字母结尾就知道是什么了,Stream结尾是字节流,Reader和Writer结尾是字符流。

往内存中去的叫输入流,读取到内存,从内存中出来,往硬盘中去的叫输出流,写入。(以内存作为参照物)。

字节流一次读取八个二进制位,byte,可拷贝视频,音频,图片,文件字节流是万能的...

字符流一次读取一个字符,char ,只能拷贝普通文本文件,word文件都拷贝不了,因为word文件不是普通文件,但是能用记事本打开不乱码的文件都是普通文本文件。

所有流用完之后都要关闭,close()关闭,输出流用完之后要记得调用flush()刷新,把内存中剩余的数据全部输出干净,不刷新可能会丢失数据。(神仙上完wc也是要擦pp的嘛)

 

流的四大家族首领

InputStream

OutputStream

Reader

Writer

这四个类都是抽象类,不可被实例化。都是顶级的,他们的父类是Object。

常见的十五个流

文件流

操作文件的流

FileInputStream        //文件字节输入流

FileOutputStream        //文件字节输出流

FileReader                //文件字符输入流

FileWriter                //文件字符输出流

以下代码是拷贝文件:假设我们要从D盘拷贝文件到E盘,文件并不是唰的一下就过去了,它是要经过内存的,先读取到内存,然后从内存写入到另一个硬盘。应该是一边读一边写,copy完之后,检查一下字节大小,如果是一样的,恭喜你,拷贝成功了

public class Copy{

    public static void main(String[] agrs){

        FileInputStream fis=null;
        FileOutputStream fos=null;

            try{
        //文件的起点    
        fis=new FileInputStream("文件的位置");
        //文件的终点
        fos=new FileOutputStream("另一个位置+拷贝的文件名字");    

        //我们使用的是字节流,所以定义一个字节数组,一次拷贝一罩文件
        byte bytes[]=new byte[1024*1024];
        //定义整形变量,返回byte数组读取到的有效字节个数
        int readQuantity=0;

        //一边读一边写
        //获取到的字节数量只要不等于-1就继续循环
        while((readQuantity=fis.read(bytes))!=-1){
            fos.writer(bytes,0,readQuantity);
}
            //刷新一下
            fos.flush();
}catch(Exception e){
        e.printStackTrace();

}finally{
        //分开关闭两个流要分开try,如果一个流影响到另一个流的关闭就不好了
      
    //tip:用ifn可快速生成这个架子(框架)
        if(fis!=null){

        fis.close();
        异常捕捉一下
}

        if(fos!=null){
    
        fos.close();    
        异常捕捉一下
}



}



    }


}

缓冲流

自带char或byte数组,有一个readLine()方法,读取一行文本内容,返回一个字符串对象,

没有读取到内容时,返回null

BufferedInputStream                //缓冲输入字节流

BufferedOutputStream                //缓冲输出字节流

BufferedReader                        //缓冲输入字符流

BufferedWriter                        //缓冲输出字符流

对象流

ObjectInputStream                //对象输入字节流

ObjectOutputStream                //对象输出字节流

数据流

一种加密的流,不是普通文本文件,记事本打开会乱码,输入和输出的顺序要一致,否则读到的数据是错误的,只能用DataInputStream来读取。

DataInputStream                //数据输入字节流

DataOutputStream                //数据输出字节流

标准流

不需要手动关闭,默认的输出方向是往控制台上打印,可在创建对象时,在构造方法处填写要打印的目标文件的地址,全部打印到目标文件中去。

public class PrintStream{
    public static void main(String[]args){
    
        PrintStream ps=new PrintStream(new FileOutputStream("文件的位置.txt"));
    
           ps.println("打印在这里的文字,不会输出到控制台,会输出到 文件的位置.txt文本文件当中");

    }
}

PrintStream

转换流

外面的流叫包装流,里面的流叫节点流,关闭流的时候,只需要关闭包装流就可以了,底层源代码在会把节点流的对象付给里面的成员变量in,在调用close方法的时候,只要in不等于空,in也会自动调close方法关闭自己。

InputStreamReader                //字节输入流转换成字符输入流

OutputStreamWriter               //字节输出流转换成字符输出流

File类

tip:file类不属于四大家族,它是文件和路径的抽象表达形式。用于操作文件和创建目录等...

创建File对象

File f1=new File("文件的路径");

file类常用的方法:

f1.length()        //获取文件或目录的字节大小。

f1.mkdir()          //创建目录

f1.mkdirs()        //创建多重目录,但是构造方法处应该写成这样    new File("D://一层//两层//三层//四层/") ;这只是一个演示的例子。

f1.exists()        //判断文件或者目录是否存在。

f1.getAbsolutePath()        //获取绝对路径 idea工具的绝对路径就是object工程下的根

f1.lastModified()                //获取文件最后一次修改的日期,返回值是一个long类型

public class LastModifiedTest{

    public static void main(String[] args){


        //创建file对象
        File f=new File("D:\这是一个例子");

       long lastTime = f.lastModified();

        //创建日期对象
        Date date=new Date(lastTime);
        //格式化日期对象
        SimpleDateFormat slf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
        String time = slf.format(date);
    
        System.out.println("文件最后一次修改的日期是:"+time);










    }

}

f1.isFile()        //判断文件是否存在

f1.isDrictory()        //判断目录是否存在

f1.getParent()        //获取上级父目录

f1.createNewFile()        //创建一个新的文件

f1.delete()                //删除

以上代码都是本人纯手打,有什么错误请指出(我本来是用手机写的,写了我两个小时,一个不小心退出了,打了水漂)这次我是用电脑打的。

     

                 ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​  歲在辛丑八月十三日秋管著書                

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值