Java SE I/O流

文章介绍了Java中不同类型的I/O流(节点流、缓冲流和转换流)及其在文本文件和非文本文件复制中的应用,包括FileReader/FileWriter、FileInputStream/FileOutputStream、BufferedReader/BufferedWriter、InputStreamReader/OutputStreamWriter等类的使用示例。
摘要由CSDN通过智能技术生成

分类

按方向 \ 按流量

字节流

字符流

输入流

InputStream

Reader

输出流

OutputStream

Writer

常用流分类

字节输入流

字节输出流

字符输入流

字符输出流

FileInputStream

FileOutputStream

FileReader

FileWriter

缓冲流

BufferedInputStream

BufferedOutputStream

BufferedReader

BufferedWriter

转换流

InputStreamReader

OutputStreamWriter

注意

  • 文本文件 ------> 字符流
  • 非文本文件 -----> 字节流

流的使用

1、节点流

案例1:文本文件复制

/**
 * 学习 FileReader  &  FileWriter
 * 案例:文件复制
 * 分解:读取文件  --->  写入文件
 */
public class FileCopy {

    public static void main(String[] args) throws Exception {
        // 有个目标文件,用来接流的数据
        File inputFile = new File("D:\\text.txt");
        File outputFile = new File("D:\\write.txt");

        // 有个输入\出流
        FileReader fileReader = new FileReader(inputFile);
        FileWriter fileWriter = new FileWriter(outputFile); //需要指定接收数据的文件

        // 开始读取输入
        char[] chars = new char[1024]; //使用缓冲数组
        int len;
        while ((len = fileReader.read(chars)) != -1){
            // 开始输出
            fileWriter.write(chars,0,len); // 使用缓冲数组的有效位
        }

        // 关流 后开启的就先关闭
        fileWriter.close();
        fileReader.close();
    }
}

案例2:图片复制

/**
 * 学习 FileInputStream  &  FileOutputStream
 * 案例:非文本文件复制
 * 分解:读取文件  --->  写入文件
 */
public class Test02 {
    public static void main(String[] args) throws Exception {
        File file1 = new File("D:\\奔驰.png");
        File file2 = new File("D:\\奔驰2.png");

        FileInputStream inputStream = new FileInputStream(file1);
        FileOutputStream outputStream = new FileOutputStream(file2);

        byte[] bytes = new byte[1024];
        int len;
        while ((len = inputStream.read(bytes)) != -1){
            outputStream.write(bytes,0,len);
        }

        outputStream.close();
        inputStream.close();
    }
}

2、处理流

案例1:缓冲流 ---> 图片复制

/**
 * 学习 缓冲流:BufferedInputStream  &  BufferedOutputStream
 * 案例:图片复制
 * 分解:先获取文件字节流,再用缓冲流套着字节流
 */
public class Test01 {
    public static void main(String[] args) throws Exception{
        File file1 = new File("D:\\小公主.jpg");
        File file2 = new File("D:\\小公主1.jpg");

        //创建节点流
        FileInputStream inputStream = new FileInputStream(file1);
        FileOutputStream outputStream = new FileOutputStream(file2);

        //创建处理流
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);

        byte[] bytes = new byte[1024 * 8];
        int len = 0;
        while ((len = bufferedInputStream.read(bytes)) != -1){
            //这一步自动有刷新缓冲区的操作
            bufferedOutputStream.write(bytes,0,len);
        }

        //如果处理流包裹着节点流,那么关闭处理流时节点流会同步关闭
        bufferedOutputStream.close();
        bufferedInputStream.close();
//        outputStream.close();
//        inputStream.close();
    }
}

案例2:缓冲流 ---> 文本复制

/**
 * 学习 缓冲流:BufferedReader  &  BufferedWriter
 * 案例:文本文件复制
 * 分解:先获取文件字符流,再用缓冲流套着字符流
 */
public class Test02 {
    public static void main(String[] args) throws Exception{
        File file1 = new File("D:\\text.txt");
        File file2 = new File("D:\\write.txt");

        FileReader inputStream = new FileReader(file1);
        FileWriter outputStream = new FileWriter(file2);

        BufferedReader bufferedReader = new BufferedReader(inputStream);
        BufferedWriter bufferedWriter = new BufferedWriter(outputStream);

/*        char[] chars = new char[1024 * 8];
        int len = 0;
        while ((len = bufferedReader.read(chars)) != -1){
            bufferedWriter.write(chars,0,len);
        }*/

        String s = bufferedReader.readLine();
        while (s != null){
            bufferedWriter.write(s);
            bufferedWriter.newLine();
            s = bufferedReader.readLine();
        }

        bufferedWriter.close();
        bufferedReader.close();
    }
}

案例3:转换流 ---> 文本读取

/**
 * 学习 转换流:InputStreamReader 
 * 案例:文本文件读取
 * 分解:先获取文件字节流,再用转换流套着字节流
 */
public class Test03 {
    public static void main(String[] args) throws Exception{
        File file1 = new File("D:\\text.txt");
        File file2 = new File("D:\\write.txt");

        FileInputStream inputStream = new FileInputStream(file1);
        FileOutputStream outputStream = new FileOutputStream(file2);

        //加入转换流
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,"UTF-8");

        char[] chars = new char[1024];
        int len;
        while ((len = inputStreamReader.read(chars)) != -1){
            System.out.println(new String(chars,0,len));
        }

        inputStreamReader.close();
        outputStreamWriter.close();
    }
}

案例4:转换流 ---> 文本复制

/**
 * 学习 转换流:OutputStreamWriter
 * 案例:文本文件复制
 * 分解:先获取文件字节流,再用转换流套着字节流
 */
public class Test03 {
    public static void main(String[] args) throws Exception{
        File file1 = new File("D:\\text.txt");
        File file2 = new File("D:\\write.txt");

        FileInputStream inputStream = new FileInputStream(file1);
        FileOutputStream outputStream = new FileOutputStream(file2);

        //加入转换流
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,"GBK");

        char[] chars = new char[1024];
        int len;
        while ((len = inputStreamReader.read(chars)) != -1){
            outputStreamWriter.write(chars,0,len);
        }

        outputStreamWriter.close();
        inputStreamReader.close();
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值