IO流练习--文本文件及图片复制

IO流练习–文本文件及图片复制
1.思路

使用IO流复制文件可以总结为以下步骤

  • 1.创建输入流,与要读取的源文件建立关联,
  • 2.创建输出流,与要写入目标文件建立关联
  • 3.创建中间变量用于临时存储读取的数据
  • 4.从源文件中读取数据存入临时变量
  • 5.把临时变量存储的数据存入目标文件
  • 6.关闭流

按照以上步骤运用字符流与字节流方法即可

2.字符流复制文本
2.1 字符流一次读取一个字符进行复制

代码如下

import java.io.*;
public class BufferedDemo {
    public static void main(String[] args) throws IOException {
        //字符缓冲流写对象
        //1.创建输入流,与要读取的源文件建立关联,
        FileReader fr = new FileReader("lib/1.txt");
        //2.创建输出流,与要写入目标文件建立关联
        FileWriter fw = new FileWriter("lib/2.txt");
        //3.创建中间变量用于临时存储读取的数据
        //读取数据的返回值
        int len;
        //4.从源文件中读取数据存入临时变量,此时read()方法返回的是字符在字符集中的编号,只有非负数,返回-1时为结束标志
        while((len = fr.read()) != -1){
            //5.把临时变量存储的数据存入目标文件
            fw.write(len);
        }
        //6.关闭流
        fw.close();
        fr.close();
    }
}
2.2 字符流使用字符数组进行读取复制

代码如下:

import java.io.*;
public class BufferedDemo {
    public static void main(String[] args) throws IOException {
        //字符缓冲流写对象
        //1.创建输入流,与要读取的源文件建立关联,
        FileReader fr = new FileReader("lib/1.txt");
        //2.创建输出流,与要写入目标文件建立关联
        FileWriter fw = new FileWriter("lib/2.txt");
        //3.创建中间变量用于临时存储读取的数据
        //读取数据的返回值
        int len;
        //数组大小建议为1024的整数倍
        char[] chs = new char[1024];
        //4.从源文件中读取数据存入临时变量,此时read(chs)方法返回的是读取到的有效字符个数,返回-1时为结束标志
        while((len = fr.read(chs)) != -1){
            //5.把临时变量存储的数据存入目标文件
            fw.write(chs,0,len);
        }
        //6.关闭流
        fw.close();
        fr.close();
    }
}
  • 使用字符数组效率更高
2.3 字符流使用字符缓冲流进行读取复制

代码如下

import java.io.*;
public class BufferedDemo {
    public static void main(String[] args) throws IOException {
        //字符缓冲流写对象
        //1.创建输入流,与要读取的源文件建立关联,
        FileReader fr = new FileReader("lib/1.txt");
        BufferedReader br = new BufferedReader(fr);
        //2.创建输出流,与要写入目标文件建立关联
        FileWriter fw = new FileWriter("lib/2.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        //3.创建中间变量用于临时存储读取的数据
        //读取数据的返回值
//        int len;
//        //4.从源文件中读取数据存入临时变量
//        while((len = br.read()) != -1){
              //5.把临时变量存储的数据存入目标文件
//            bw.write(len);
//        }

        //一次读取一行
        String str;
        while((str = br.readLine())!= null){
            bw.write(str);
            //读取一行写入一行,若没有这一行,可能存在流没有关闭,就不往目标文件中写入数据的情况。
            bw.flush();
            //手动换行
//          bw.write("\r\n");
            //或新起一行
            bw.newLine();
        }
        //6.关闭流
        bw.close();
        fw.close();
        br.close();
        fr.close();
    }
}
  • 进行数据的读写时,使用缓冲流对象,读写效率更高,安全性更好
3.字节流复制图片
2.1 字节流一次读取一个字节进行复制

代码如下:

import java.io.*;
public class PutStreamDemo {
    public static void main(String[] args) throws IOException {
        //1.创建输入流,与要读取的源文件建立关联,
        InputStream is = new FileInputStream("lib/a.jpg");
        //2.创建输出流,与要写入目标文件建立关联
        OutputStream os = new FileOutputStream("lib/b.jpg");
        //3.创建中间变量
        int len;
        //4.从源文件中读取数据存入临时变量
        while((len = is.read())!=-1){
            //5.把临时变量存储的数据存入目标文件
            os.write(len);
        }
        //6.关闭流
        os.close();
        is.close();
    }
}
2.2 字节流使用字节数组进行读取复制

代码如下:

import java.io.*;
public class PutStreamDemo {
    public static void main(String[] args) throws IOException {
        //1.创建输入流,与要读取的源文件建立关联,
        InputStream is = new FileInputStream("lib/a.jpg");
        //2.创建输出流,与要写入目标文件建立关联
        OutputStream os = new FileOutputStream("lib/b.jpg");
        //3.创建中间变量
        int len;
        byte [] bys = new byte[1024];
        //4.从源文件中读取数据存入临时变量
        while((len = is.read(bys))!=-1){
            //5.把临时变量存储的数据存入目标文件
            os.write(bys,0,len);
        }
        //6.关闭流
        os.close();
        is.close();
    }
}
2.3 字节流使用字节缓冲流进行读取复制

代码如下:

import java.io.*;
public class PutStreamDemo {
    public static void main(String[] args) throws IOException {
        //1.创建输入流,与要读取的源文件建立关联,
        InputStream is = new FileInputStream("lib/a.jpg");
        BufferedInputStream bis = new BufferedInputStream(is);
        //2.创建输出流,与要写入目标文件建立关联
        OutputStream os = new FileOutputStream("lib/b.jpg");
        BufferedOutputStream bos = new BufferedOutputStream(os);
        //3.创建中间变量
        int len;
        //4.循环读取源数据存入中间变量,
        while((len = bis.read())!=-1){
            //5.循环将中间变量数据写入目标文件直到结束
            bos.write(len);
        }
        //6.关闭流
        bos.close();
        bis.close();
        os.close();
        is.close();
    }
}
4.其他
  • 建议:在进行纯文本复制时使用字符流,在进行视频,音频,图像等文件复制时使用字节流
  • 缓冲流中缓冲池默认大小为8Kb的字节数组。
  • 单个字符或字节进行复制效率太低,使用自定义数组来复制也会有空间浪费的问题,建议使用缓冲流进行复制
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值