字节输入与输出流

概述

        以字节为单位进行读写操作的流

字节输入流:InputStream

方法:

 abstract  int read() 
          从输入流中读取数据的下一个字节。 
int read(byte[] b) 
          从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 
int read(byte[] b, int off, int len) 
          将输入流中最多 len 个数据字节读入 byte 数组。 
void close() 
          关闭此输入流并释放与该流关联的所有系统资源。 

  子类FileInputStream    

  • FileInputStream 从文件系统中的某个文件中获得输入字节。【读取字节数据】

  • FileInputStream 用于读取诸如图像数据之类的原始字节流。

    • 要读取字符流,请考虑使用 FileReader

创建对象和读取数据

//导包
import java.io.FileInputStream;
//编译异常,暂用该包抛出异常
import java.io.IOException;

//创建字节输入流,目标指向相对路径下的hello.txt
FileInputStream fileInputStream = new FileInputStream("hello.txt");
//读取数据
fileInputStream.read();//每次读取一个字节的数据
//创建数组b 长度为10
byte[] b = new byte[10];
//将读数据放入数组b中,每次读取的数量是10,文件中剩余内容不足10时全部读取
int len = fileInputStream.read(b);

//关闭输入流
fileInputStream.close;

  字节输出流:OutputStream

  • 文件输出流是用于将数据写入 File 的输出流。

  • FileOutputStream 用于写入诸如图像数据之类的原始字节的流。

    • 要写入字符流,请考虑使用 FileWriter

    创建对象和写入数据

/**
			
    FileOutputStream(String name) 
    创建一个向具有指定名称的文件中写入数据的输出文件流。 		
    FileOutputStream(String name, boolean append)         
    创建一个向具有指定 name 的文件中写入数据的输出文件流。 		 
    void write(int b) 
    将指定字节写入此文件输出流。 		
    void write(byte[] b)
    将 b.length 个字节从指定 byte 数组写入此文件输出流中。 
    void write(byte[] b, int off, int len) 
    将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。 		 
*/
		
    // 创建字节输出流,准备向world.txt中书写数据,如果添加了布尔值true则表示追加新的内容
    FileOutputStream fileOutputStream = new FileOutputStream("world.txt",ture)
    //每次写入的字节数
	fileOutputStream.write(10);
	//创建需要写入到文档中的数据
	byte [] b = {97,98,98,99,100};
	//从数组b的第0位开始的2个字节文件进行输入
	fileOutputStream.write(b, 0, 2);
	//关闭字节输入流
	fileOutputStream.close();

文件复制

        在学习了文件的输入输出后,可以在java程序中完成将目标文件复制到指定地址

例:将某个文件复制到桌面

/**
		 *	复制相对路径下的某一个文件到桌面
		 *	1、创建流对象
		 *		输入流、输出流
		 *	2、批量读取效率较高,创建字节数组,记录每一次读取内容的数量
		 *	3、循环读写数据
		 *	4、关闭流
		 */
		//记录当前开始的时间以计算复制文件运行的时间
		long startTime = System.currentTimeMillis();
		//创建输入流输出流对象
		//目标文件是相对路径下的world.txt
		FileInputStream fileInputStream = new FileInputStream("world.txt");
		//目标位置是桌面
		FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\24875\\Desktop\\world.txt");
		//假设world.txt没有内容
		int len = -1;
		//定义每次读写进入数组的字节的长度
		byte[] b = new byte[1024*32];
		//循环读写 每次将一个字节的数据放入数组b中
		while ((len = fileInputStream.read(b)) != -1) {
			//写入读取的数据
			fileOutputStream.write(b, 0, len);
		}
		//关闭输入输出流
		fileInputStream.close();
		fileOutputStream.close();
		//展示该过程所消耗的时间
		System.out.println(System.currentTimeMillis() - startTime);