IO流(Input读 Output写)

IO流(Input读 Output写)

1、java中IO流的四大首领
java.io.InputStream     字节输入流           流分为:输出流   输入流
java.io.OutputStream	字节输出流       		  字节流	字符流
												 字节流是万能的,字符流自能读取普通文本 
java.io.Reader			字符输入流				  带Stream结尾的都是字节流,带Reader,
java.io.Writer			字符输出流				  Writer都是字符流
1.1注意

​ 所有的流都实现了Closerable接口,都有close()方法,流毕竟是一个管道,用完一定要记得关闭。

​ 所有的输出流都有一个falsh()方法,用来将管道中剩余未输出的数据强行输出完毕,清空管道并关闭管道,要有一个好习惯,用完输出用完flash一下,不然会丢失数据

需要掌握的流(16个)重点掌握前两个和最后两个
1文件专属流(4个)
1.1 java.io.FileInputStream 文件字节输入流,任何类型的文件都可以用这个流来读,

​ FileInputStream里面的 int read()方法读到的是对应的字节,所以返回的是 int, 可以自己强行转换成Sting

​ 一定要先会搭架子,里面的异常直接try catch

        //创建文件字节输入流对象
        FileInputStream file = null;
        try {
   
            //创建文件字节输入流对象,传入文件的路径的位置
         file = new FileInputStream("D:\\untitled\\read");

         //开始读
         //调用read读的方法,开始read的指正指向空,调用的话,是先移动,再读值
        int readDate = file.read();//这个方法的返回值是读取到的字节本生
            System.out.println(readDate);
            readDate = file.read();
            System.out.println(readDate);
            //当read()读到文件的末尾,在读的时候,读取不到任何数据,返回-1
            
        } catch (FileNotFoundException e) {
   
            e.printStackTrace();
        } catch (IOException e) {
   
            e.printStackTrace();
        } finally {
   
            //在finally语句中确保流一定关闭,关闭前提,流不是空的
            if(file!= null){
   
                try {
   
                    file.close();
                } catch (IOException e) {
   
                    e.printStackTrace();
                }
            }
        }

         //读一般采用while循环的方式    改进循环 以后都这么写
            int readDate1 = 0;
            while((readDate1= file.read())!= -1)
                System.out.println(readDate1);
         这种方式效率比较低,一次读一个字节
1.2 学习int read(byte[ ] b )

​ 一次最多读取b.length个字节,提高效率

​ 往byte [ ] 数组中去读

 FileInputStream file = null;
        try {
   
            //相对路径会怎样?   相对路径一定是从当前位置开始找
           //这里的默认当前路径是工程的根,project的根,找到project文件夹,放在里面 必须放到工程文件夹下,不然会报错找不到
            //如果放到到项目文件夹中,那么文件名必须写具体。从project文件为起点往下找
            file = new FileInputStream("tempfile");
            //开始读,采用byte数组,一次最多读取byte.length个字节
            byte[] bytes = new byte[4];
            //返回值是读到的字节的数量(不是字节本身)
             int readCount = file.read(bytes);
             //调用方法将字节数组全部转换为字符串
            //不应该全部都转换,而是读了多少个字符转多少个
             String s = new String(bytes,0,readCount);
            System.out.println(s);
             } catch (FileNotFoundException e) {
   
            e.printStackTrace();
        } catch (IOException e) {
   
            e.printStackTrace();
        } finally {
   
            if(file != null) {
   
                try {
   
                    file.close();
                } catch (IOException e) {
   
                    e.printStackTrace();
                }
            }
优化上面的代码,获得最终版,这个才是需要掌握的,要背会
public static void main
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值