IO流-字节流
1.理解字节流
- 字节流(InputStream,OutputStream)
- 字节流是以字节码的形式读取或写出文件数据
- 字节流是所有流的基础
- 字节流是以字节码为操作单位所以更适用于操作二进制文件(如:图片文件、音频、视频、压缩包等非文本文件)
- Java中操作进行字节流操作的两个基础类(InputStream<字节输入流>,OutputStream<字节输出流>)
- 在实际使用时我们一般使用两个子类实现字节流操作
- (1) FileInputStream:基于文件的字节输入流
- (2) FileOutputStream:基于文件的字节输出流
- (3) BufferedInputStream:带有缓冲区的字节输入流
- (4) BufferedOutputStream:带有缓冲区的字节输出流
- 在实际使用时我们一般使用两个子类实现字节流操作
2.实例
2.1.输入流
- 代码1
package 字节流;import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;public class InputStreamDemo {/*** 字节输入流* @param args*/public static void main(String[] args) throws IOException {//创建字节流对象FileInputStream fileInputStream=new FileInputStream("D:\\code\\io-project\\IO流常用方法");//从字节输入流中读取一个字节/*int num=fileInputStream.read();System.out.println(num);System.out.println((char)num);*//*//将读取的字节码放入字节数组中byte[] buf=new byte[3];//字节数组fileInputStream.read(buf);String str=new String(buf);System.out.println(str);*///定义缓冲区byte[] buf=new byte[1024];//表示读取的实际长度int len=-1;while ((len=fileInputStream.read(buf)) !=-1){//将字节码转换为字符串String str=new String(buf,0,len);System.out.println(str);}//关闭 输入流对象,释放所占有的资源fileInputStream.close();} }
- 源码2
package 字节流;import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream;public class InpetStreanDemo1 {public static void main(String[] args) throws IOException {InputStream inputStream=new FileInputStream("E:\\学习笔记\\IO流\\3.字节流.rar");byte[] bytes=new byte[1024];int len=-1;while ((len=inputStream.read(bytes,0,bytes.length))!=-1){String str=new String(bytes,0,len);System.out.println(str);}} }
2.2输出流
- 代码
package 字节流;import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException;public class OutputStreamDemo {/*** 创建字节输出流对象* 如果输出的目标文件存在则向文件中直接写入内容,如果目标文件不存在则新建文件* 字节输出流默认以替换的方式写出数据* 如果需要追加的方式向文件中写入需要再构造方法中加入true参数* @param args* @throws IOException*/public static void main(String[] args) throws IOException {//创建字节输出流对象FileOutputStream outputStream=new FileOutputStream("E:/redme.txt",true);String str="\r\n你好,哈哈哈哈哈";//String str="你好";outputStream.write(str.getBytes());outputStream.close();} }
2.3文件复制
- 源码1
package 字节流;import java.io.*;public class FileCopy {public static void main(String[] args) throws IOException {File srcFile=new File("E:\\学习笔记\\IO流\\3.字节流.rar");File descFile=new File("D:\\3.字节流.rar");fileCopy(srcFile,descFile);}/*** 文件复制方法* @param srcFile 要复制的源文件* @param descFile 要复制的目标文件*/public static void fileCopy(File srcFile,File descFile) throws IOException {//创建字节输入和输出流InputStream inputStream=new FileInputStream(srcFile);OutputStream outputStream=new FileOutputStream(descFile);//创建一个字节数组作为读取数据的缓冲区byte[] buf=new byte[1024];int len=-1;//获得当前时间的毫秒数long start=System.currentTimeMillis();//循环读取数据while ((len=inputStream.read(buf,0,buf.length))!=-1){//循环写出到文件中outputStream.write(buf,0,len);//刷新输出流outputStream.flush();}//获得当前时间的毫秒数long end=System.currentTimeMillis();System.out.println("需要的时间"+(end-start)+"毫秒");//关闭输入和输出流inputStream.close();outputStream.close();} }
源码2
package 字节流;import java.io.*;public class FileCopyForBuffer {public static void main(String[] args) throws IOException {File srcFile=new File("E:\\学习笔记\\IO流\\3.字节流.rar");File descFile=new File("D:\\3.字节流.rar");fileCopy(srcFile,descFile);}/*** 文件复制方法* @param srcFile 要复制的源文件* @param descFile 要复制的目标文件*/public static void fileCopy(File srcFile,File descFile) throws IOException {//创建字节输入和输出流InputStream inputStream=new FileInputStream(srcFile);/*** 带有缓冲区的字节流* 该类为一个包装类*/BufferedInputStream bufferedInputStream=new BufferedInputStream(inputStream);OutputStream outputStream=new FileOutputStream(descFile);BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream);//创建一个字节数组作为读取数据的缓冲区byte[] buf=new byte[1024];int len=-1;//获得当前时间的毫秒数long start=System.currentTimeMillis();//循环读取数据while ((len=bufferedInputStream.read(buf,0,buf.length))!=-1){//循环写出到文件中bufferedOutputStream.write(buf,0,len);//刷新输出流bufferedOutputStream.flush();}//获得当前时间的毫秒数long end=System.currentTimeMillis();System.out.println("需要的时间"+(end-start)+"毫秒");//关闭输入和输出流bufferedInputStream.close();bufferedOutputStream.close();} }