JavaSE进阶之I/O流

1.I/O流有什么用途?

Java程序使用I/O流对磁盘进行读和写操作。I:Input的缩写,表示从磁盘中读取文件数据到内存;O:Output的缩写,表示将数据从内存中写入磁盘进行永久保存;流:即数据,把数据的读写看成和水的流动一样。I/O涉及到磁盘读写,非常耗时间,而数据都是存放在磁盘中的,因此在涉及I/O操作时,要想办法减少I/O操作的次数。比如数据库索引数据结构的选择,考虑到磁盘I/O,最终选择了B+树作索引的数据结构。

2.如何使用I/O流?

Java提供了使用I/O流的接口,按数据格式分为了两大类:字节流和字符流。字节流:数据是一个个字节汇集而成的;字符流:数据是一个个字符汇集而成的。I/O流将文件看作是对象进行操作。接下来演示I/O的使用方法。

2.1字符流

2.1.1字符输入流

2.1.1.1普通字符输入流

依次读取一个字符

    @Test
    public void test1() throws Exception {
  
        File file = new File("src/abcd.txt");//创建文件对象
        Reader fr=new FileReader(file);//创建一个字符输入流与源文件接通
        int code;
        while((code=fr.read())!=-1)//read方法没有参数,表示读取一个字符,返回其ascii码
        {
            System.out.print((char) code);//ascii码强转为字符
        }
    }

每次读取一堆字符:用到字符数组转String类的方法:String new String(字符数组变量名,0,字符数组的长度);

 @Test
    public void test2() throws Exception {
        //1.根据源文件创建文件对象
        File file = new File("src/abcd.txt");
        //2.创建一个字符输入流与源文件接通
        Reader fr=new FileReader("src/abcd.txt");
        //3.设置字符数组,接收文件中的数据,当作单数传入read方法,一次读取指定数量的字符(如有)
        char[] buffer=new char[1024];//可存放1k个字符(大于源文件中的字符数)
        int len;
        while((len=fr.read(buffer))!=-1)
        {
            //字符数组转成字符串,有多少转多少,个数用len表示
            String s = new String(buffer, 0, len);
            System.out.println(len);//字符数组的长度
            System.out.println(s);//源文件的内容
        }

2.1.1.2缓冲字符输入流

缓冲:在内存中申请一段内存空间,用于存放磁盘中可能用到的数据,即将磁盘中的数据的一部分放到内存中,加快读写速度。缓冲字符流是普通字符流的包装,属于高级流。

一次读取一行字符

 //每次读取一行字符
    @Test
    public void test1(){
        try(
            //1.创建一个字符输入流与源文件接通
            Reader fr=new FileReader("src/abcd.txt");
            //流包装
            BufferedReader br=new BufferedReader(fr);
        ){
            String line;
            //读取行
            while((line=br.readLine())!=null )
            {
                System.out.println(line);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

一次读取多行

 //每次读取多行字符
    @Test
    public void test2() throws Exception {
        //1.创建一个字符输入流与源文件接通
        try(
            Reader fr=new FileReader("src/abcd.txt");
        ){
            char[] buffer = new char[1024];2.设置字符数组,接收文件中的数据:1k个字符
            int len;
            while ((len = fr.read(buffer)) != -1) 
            {
                String s = new String(buffer, 0, len);
                System.out.println(s);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

2.1.2字符输出流(未完待续。。。。。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗=里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值