Java学习20 2020-02-26

内容

1.流的图示
2.十六个需要掌握的流
3.Input和Output的继承结构图
4.Reader和Writer的继承结构图
5.FileInputStream

一.流的图示

二.十六个需要掌握的流

十六个需要掌握的流

三.Input和Output的继承结构图

Input和Output的继承结构图
InputStream和OutputStream都是抽象类

四.Reader和Writer的继承结构图

Reader和Writer的继承结构图
Reader和Writer都是抽象类

五.FileInputStream

1.read()

(1)注意点

①如果要设置成文件,必须把后缀名去掉。
②read()是从此输入流中读取一个数据字节

(2)使用示例
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;


public class 测试程序 {                                                                                                             

    
                                                                                                                                
    public static void main(String[] args) {
    
        FileInputStream fis = null;
        
        try {
            //1.保存文件路径(绝对/相对)
            //String filePath = "temp01";//相对路径
            //String filePath = "D:\\All Java projects Eclipse\\对象\\src\\对象\\temp01";
            String filePath = "D:/All Java projects Eclipse/对象/src/对象/temp01";
            
            //2.要读取某文件,首先要与这个文件创建一个“输入流”
            fis = new FileInputStream(filePath);
            
            //3.开始读
            int i1 = fis.read();//以字节的方式读取
            int i2 = fis.read();
            
            System.out.println(i1);//因为文件中第一个是a,所以输出97
            System.out.println(i2);//因为是b,所以输出98.
            //如果已经读取到文件的最后,没东西了,就输出-1
        }catch(FileNotFoundException e) {
            e.printStackTrace();
        }catch(IOException e) {
            e.printStackTrace();
        }finally {
            
            //为了保证流一定会释放,所以在finally语句块中执行
            if(fis != null) {
                try {
                    fis.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
                
            }
            
        }
            
 
    }
}
(3)以循环的方式读取
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;


public class 测试程序 {                                                                                                             

    
                                                                                                                                
    public static void main(String[] args) throws IOException {
    
        //1.创建流
        FileInputStream fis = new FileInputStream("D:\\All Java projects Eclipse\\对象\\src\\对象\\temp01");
        
        //2.开始读
        /*
        while(true) {
         
            int temp = fis.read();
            
            if(temp == -1) break;
            
            System.out.println(temp);
        }*/
        //升级循环
        int temp = 0;
        while((temp = fis.read()) != -1) {
            System.out.println(temp);
        }
            
        //3.关闭
        fis.close();
 
    }
}

以上程序存在缺点:频繁访问磁盘,伤害磁盘,并且效率低

2.int read(byte[] bytes);

(1)注意点:

①返回的值是读到的数据个数
②读取之前在内存中准备一个byte数组,每次读取多个字节,储存到byte数组中。这个效率更高一点

(2)使用示例
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;


public class 测试程序 {                                                                                                             

    
                                                                                                                                
    public static void main(String[] args) throws IOException {
    
        //1.创建输入流
        FileInputStream fis = new FileInputStream("D:\\All Java projects Eclipse\\对象\\src\\对象\\temp01");

        //2.准备一个byte数组
        byte[] bytes = new byte[3];//每一次最多读取三个字节
        
        //3.开始读
        int i1 = fis.read(bytes);
        //将byte数组转换成字符串
        System.out.println(new String(bytes));
        int i2 = fis.read(bytes);
        System.out.println(new String(bytes));
        int i3 = fis.read(bytes);
        System.out.println(new String(bytes));
        int i4 = fis.read(bytes);
        System.out.println(new String(bytes));
        int i5 = fis.read(bytes);
        
        //4.输出
        System.out.println(i1);
        System.out.println(i2);
        System.out.println(i3);
        System.out.println(i4);
        System.out.println(i5);
        
        //5.关闭
        fis.close();
        
    }
}
(3)使用循环读取
package 对象;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;


public class 测试程序 {                                                                                                             

    
                                                                                                                                
    public static void main(String[] args) throws IOException {
    
        //1.创建输入流
        FileInputStream fis = new FileInputStream("D:\\All Java projects Eclipse\\对象\\src\\对象\\temp01");

        //2.准备一个byte数组
        byte[] bytes = new byte[1024];//每一次读取1kb
        
        //3.用循环读取
        /*while(true) {
            
            int temp = fis.read(bytes);
            if(temp == -1) break;
            
            //将byte数组中有效的数据转换成字符串
            System.out.println(new String(bytes,0,temp));//每次读取temp个
        }*/
        //升级循环
        int temp = 0;
        while((temp = fis.read(bytes)) != -1) {
            System.out.print(new String(bytes,0,temp));
        }
        //4.关闭
        fis.close();
        
    }
}

3. available()和skip()

(1)功能介绍

int available()
功能:返回流中剩余的估计字节数
skip()
功能:跳过几个字节

(2)使用示例
package 对象;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;


public class 测试程序 {                                                                                                             

    
                                                                                                                                
    public static void main(String[] args) throws IOException {
    
        //1.创建流
        FileInputStream fis = new FileInputStream("D:\\All Java projects Eclipse\\对象\\src\\对象\\temp01");
    
        //2.还剩多少估计字节
        System.out.println(fis.available());
        
        //3.读取一个字节
        System.out.println(fis.read());
    
        //4.再看一下
        System.out.println(fis.available());
        
        //5。跳过两个字节
        fis.skip(2);
        
        //6.输出下一个
        System.out.println(fis.read());
        
        //7.关闭
        fis.close();
        /*
         * 输出结果
         *  11
            97
            10
            100

         */
        
        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值