使用IO流字节输入输出流复制二进制文件如图片,Word文档等常用的文件

分类:IO流的分类

  1. 字节输入输出流:FileInputStream / FileOutputStream
  2. 字符输入输出流:FileReader / FileWriter

区别:

1.字节输入输出流:

  • 读入外部文件的时候是按字节单位读取的
  • 写出外部文件的时候是按字节直接写入文件中,无需经过缓存,直接修改文件

2.字符输入输出流:

  • 读入外部文件的时候是按字符单位读取的
  • 先写出到缓存中,然后刷新后写入文件,如果写二进制文件的话会出现文件损坏而无法打开的情况。

什么是二进制文件呢?

通俗易懂的说就是:Windows自带的记事本不能读懂的文件(打开乱码),如:图片,Word文件等

如果你还是分不清什么是二进制文件,没关系,我们都用字节流去读写文件就行了。

实例:在相对路径里复制 源文件(1.pptx) 到 目标文件(xieqibiao.pptx) 中

代码如下:

 //复制Word二进制文件,二进制文件就是Windows的记事本读不懂的文件,打开乱码的那种
        //1.创建字节输入流
        FileInputStream fis = new FileInputStream("1.pptx");
        //2.创建字节输出流
        FileOutputStream foStream = new FileOutputStream("xieqibiao.pptx");
        //3.复制文件
        int len = 0;//用来接收读出来的字符长度
        byte[] bys = new byte[1024];//一般长度设置为1024的整数倍
        while((len = fis.read(bys)) != -1) {//当读到还有字节的时候,写文件输出
            foStream.write(bys,0,len);//读到多少写多少
        }
        //4.关闭资源
        fis.close();
        foStream.close();

进阶:高效输入输出 -- 字符缓冲流

实例:

代码如下:

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

/*
 * BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 
 * BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
 */
public class BufferedStreamDemo {
	public static void main(String[] args) throws IOException {
		//创建输出缓冲流对象
		/*
		BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
		bw.write("hello");
		//bw.flush();
		bw.close();
		*/
		
		//创建输入缓冲流对象
		BufferedReader br = new BufferedReader(new FileReader("FileWriterDemo.java"));
		
		/*
		//一次读写一个字符
		int ch;
		while((ch=br.read())!=-1){
			System.out.print((char)ch);
		}
		*/
		
		//一次读写一个字符数组
		char[] chs = new char[1024];
		int len;
		while((len=br.read(chs))!=-1) {
			System.out.print(new String(chs,0,len));
		}
		
		//释放资源
		br.close();
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40612528/article/details/85074438