Java-IO字节流与字符流

本文详细介绍了Java中的IO流,包括字节流、字符流、缓冲流的使用,以及文件的读写操作。通过示例代码展示了如何实现文件复制,并强调了流关闭的重要性。同时,提到了字符流与字节流在处理文本和其他类型数据时的区别。
摘要由CSDN通过智能技术生成

IO流的常用流

输入流 : 输入字节流和输入字符流 将硬盘的文件输出到Java内存

输出流 : 输出字节流和输出字符流 从内存写到磁盘中

缓冲 : 缓冲的字面意思是减缓冲击力比如 看视频比较卡 暂停缓存一会

1.字节输入流

FileInputStream

package com.kz.a_Io;

import java.io.*;

public class Demo01 {
    public static void main(String[] args) throws IOException {
        File file=new File("d:/aa/2.txt");
        //创建输入字节流
        FileInputStream fls=new FileInputStream(file);
        //创建缓冲输入字节流
        BufferedInputStream bis=new BufferedInputStream(fls);
        //                    最快
        byte [] bytes=new byte[4 * 1024];
        int length;
        while ((length=bis.read(bytes))!=-1){
             //展示到控制台            byte数组会一次一次的覆盖 所有要从0到length
            System.out.println(new String(bytes,0,length));
        }
        //关流
        fls.close();
        bis.close();
    }
}

注意事项 :

1.设置的byte数组的容量,如果第二次的内容不够覆盖上一次的内容,那么没有被覆盖的就还会被输出

2.输出的时候要从第0个,到第length个。

3.read()方法如果达到流的末尾,返回-1.

4.关流(自下而上关闭流)

2.字节输出流

FileOutputStream

package com.kz.a_Io;

import java.io.*;

public class Demo02 {
    public static void main(String[] args) throws IOException {
        File file=new File("d:/aa/2.txt");
        //输出字节流
        FileOutputStream fos=new FileOutputStream(file);
        //创建缓存字节流
        BufferedOutputStream bos=new BufferedOutputStream(fos);
        //字符串
        String str="你一定能够成为你想要去成为的人";
        //将字符串转换为byte数组
        byte[] bytes = str.getBytes();
        //写入
        bos.write(bytes);
        //关闭
        bos.close();
        fos.close();

    }
}

注意事项:

输入 read()

输出 write()

练习: 将d:/aa/bb/1.txt 复制到d:/aa/2.txt

package com.kz.a_Io;

import java.io.*;

public class Demo03 {
    public static void main(String[] args) throws IOException {
        /**
         * 将d:/aa/bb/1.txt 复制到d:/aa/2.txt
         */
        //记录开始时间
        long start = System.currentTimeMillis();
        //创建缓存输入字节流
        BufferedInputStream put = new BufferedInputStream(new FileInputStream(new File("d:/aa/bb/1.txt")));
        //创建缓存输出字节流
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d:/aa/2.txt"));
        //创建字节数组
        byte[]bytes=new byte[4*1024];
        int length;
        while ((length=put.read(bytes))!=-1){
            //复制操作
            out.write(bytes,0,length);
            System.out.println(new String(bytes,0,length));
        }
        //记录结束时间
        long end = System.currentTimeMillis();
        System.out.println(end-start);
        //关闭流
        put.close();
        out.close();
    }
}

注意事项: 关流(不然文件是存不进去的)

3.字符输入流

FileReader

package com.kz.a_Io;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Demo06 {
    public static void main(String[] args) throws IOException {
        //字符流   缓冲字符输入流
        BufferedReader bufferedReader = new BufferedReader(new FileReader("d:/aa/2.txt"));
        int length;
        char[] chars=new char[10];
        while ((length=bufferedReader.read(chars))!=-1){
            System.out.println(new String(chars,0,length));
        }

    }
}

//字符流只能对文本进行操作,图片视频音频等需用字节流

4.字符输出流

FileWriter

package com.kz.a_Io;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Demo07 {
    public static void main(String[] args) throws IOException {
        //缓存字符输出流
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("d:/aa/2.txt"));
        String str="不要假装努力,生活不会陪你演习";
        bufferedWriter.write(str);
        //输出流切记关流
        bufferedWriter.flush();//刷新
        bufferedWriter.close();
    }
}

write()方法的重载 可传多个参数

总结:

输入流:
	两种:
		字节输入流 : FileInputStream 	FileInputStream 对应的缓冲流 是BufferedInputStream
		字符输入流: FileReader           FileReader 对应的缓冲流  BufferedReader
		read();
输出流:
	两种:
		字节输出流:  FileOutputStream    FileOutputStream  对应的缓冲流  BufferedOutputStream
			
		字符输出流:   FileWriter         FileWriter  对应的缓冲流  BufferedWriter		
		write()
处理文本:均可使用
处理其他:必须使用字节流
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Kkkouz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值