OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream(示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream(示相关的知识,希望对你有一定的参考价值。
一.OutputStream 类(java.io)
概述:OutputStream类就是专门用于从程序中将数据写入到介质中;
定义:public abstract class OutputStream extends Object implements Closeable, Flushable
OutputStream类:此抽象类是表示输出字节流的所有类的超类。
注意:io流不能操作文件夹(文件夹中当然不能直接写内容)
操作的最小单位是bit
存储的最小单位是byte
1byte = 8 bit
二.FileOutputStream 类(java.io)
概述:OutputStream常用子类:;
构造方法:
FileOutputStream(String name) :创建一个向具有指定名称的文件中写入数据的输出文件流。
Name表示一个文件的路径,可以是相对的也可以是绝对的!
FileOutputStream(File file) :创建一个向指定 File 对象表示的文件中写入数据的文件输出流.
续写:
FileOutputStream(File file, boolean append):创建一个向指定 File 对象表示的文件中写入数据的文件输出流
需要传递append的值为:true即可;
FileOutputStream(String name, boolean append):创建一个向具有指定 name 的文件中写入数据的输出文件流。
换行:
使用字符流的时候,可以直接写入:“\r\n”;
使用字节流的时候,需要写入“\r\n”的字节数组;
常用方法:
public void write(byte[] b){}: b.length 个字节从指定 byte 数组写入此文件输出流中。
public void write(byte[] b, int off, int len){}:将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
public void write (int b){}:将指定字节写入此文件输出流.
public void close(){}:关闭此文件输出流并释放与此流有关的所有系统资源。
String 类的一个常用方法:
public byte[] getBytes(){}:使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
三.InputSteam 类(java.io)
定义:public abstract class InputStream extends Object implements Closeable
概述:InputStream 此抽象类是表示字节输入流的所有类的超类。
四.FileInputStream 类(java.io)
概述:InputStream 类的常用子类;FileInputStream 类是专门用于从文件中读取字节数据的流,读取到的内容以十进制的数据的形式返回;
如果想要将十进制的数据转换成对应的字符,需要程序员对照码表转换;
具体转换方式有2种:
1:直接强转成char类型的字符;(适用于一个数字)
2:使用String类的构造方法;(适用于一个或多个数字)
构造方法:
FileInputStream(String name):通过打开一个到实际文件的连接来创建一个 FileInputStream,
该文件通过文件系统中的路径名 name 指定。
FileInputStream(File file):通过打开一个到实际文件的连接来创建一个 FileInputStream,
该文件通过文件系统中的 File 对象 file 指定。
常用方法:
public int read(){}:从此输入流中读取一个数据字节。返回的是读取到的这个字节的码值!
public int read(byte[] b){}:从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。返回的是读取到的字节的个数!
public int read(byte[] b, int off, int len){}:从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。返回的是读取到的字节的个数!
public void close(){}:关闭此文件输入流并释放与此流有关的所有系统资源。
五.BufferedOutputStream 类(java.io)
定义:public class BufferedOutputStream extends FilterOutputStream
属于OutputStream的孙子类
构造方法:BufferedOutputStream(OutputStream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
六.BufferedInputStream 类(java.io)
定义:public class BufferedInputStream extends FilterInputStream
构造方法:BufferedInputStream(InputStream in) 创建一个 BufferedInputStream 并保存其参数,即输入流in,以便将来使用。
七.四种方式复制文件:
1:高效流加数组
//1:高效流加数组,复制"E:\\JAVAPractice\\IO\\1.jpg" import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class Copy01{ public static void main(String[] args) throws IOException{ //抓取开始时间 long t1 = System.currentTimeMillis(); //创建高效流 BufferedInputStream bin = new BufferedInputStream(new FileInputStream("E:\\JAVAPractice\\IO\\1.jpg")); BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream("E:\\JAVAPractice\\IO\\1_1.jpg")); //定义字节数组存储读取内容 byte[] b = new byte[1024]; int i = -1;//读取到的字节个数 while((i = bin.read(b)) != -1){ bout.write(b,0,i); bout.flush(); } bout.close(); bin.close(); //抓取程序结束时间 long t2 = System.currentTimeMillis(); System.out.println("耗时:"+(t2-t1)/1000.0);//耗时:0.25 } }
2:基本流加数组
//基本流加数组,复制"E:\\JAVAPractice\\IO\\1.jpg import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.IOException; public class Copy02{ public static void main(String[] args) throws IOException{ //记录程序开始时间 long t1 = System.currentTimeMillis(); //创建基本字节流对象 FileInputStream in = new FileInputStream("E:\\JAVAPractice\\IO\\1.jpg"); FileOutputStream out = new FileOutputStream("E:\\JAVAPractice\\IO\\1_2.jpg"); //定义数组存储读取到的数据 byte[] b = new byte[1024]; int i = -1;//读取到的字节个数 while((i = in.read(b)) != -1){ out.write(b,0,i); out.flush(); } //关闭流 in.close(); out.close(); //记录程序结束时间 long t2 = System.currentTimeMillis(); System.out.println("耗时:"+(t2-t1)/1000.0);//耗时:0.344 } }
3:高效流逐字节
//高效流逐字节,复制"E:\\JAVAPractice\\IO\\1.jpg import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class Copy03{ public static void main(String[] args) throws IOException{ //记录系统时间 long t1 = System.currentTimeMillis(); //创建高效字符流 BufferedInputStream bin = new BufferedInputStream(new FileInputStream("E:\\JAVAPractice\\IO\\1.jpg")); BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream("E:\\JAVAPractice\\IO\\1_3.jpg")); //定义i为ASCII码值 int i = -1; while((i = bin.read()) != -1){ bout.write(i); } //关闭流 bin.close(); bout.close(); //记录系统时间 long t2 = System.currentTimeMillis(); System.out.println("耗时:"+(t2-t1)/1000.0);//耗时:0.625 } }
4:基本流逐字节复制
//基本流逐字节复制,E:\\JAVAPractice\\IO\\1.jpg import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Copy04{ public static void main(String[] args) throws IOException{ //记录系统时间 long t1 = System.currentTimeMillis(); //创建基本字节流对象 FileInputStream in = new FileInputStream("E:\\JAVAPractice\\IO\\1.jpg"); FileOutputStream out = new FileOutputStream("E:\\JAVAPractice\\IO\\1_4.jpg"); //定义不在ASCII码值范围内的i int i = -1; while((i = in.read()) != -1){ out.write(i); out.flush(); } //关闭流 out.close(); in.close(); //记录系统时间 long t2 = System.currentTimeMillis(); System.out.println("耗时:"+(t2-t1)/1000.0);//耗时:52.383 } }
八.单层文件夹复制
//复制E:\\JAVAPractice\\IO\\demo该单层文件夹下所有txt格式文件 import java.io.File; import java.io.IOException; import java.io.FileInputStream; import java.io.FileOutputStream; public class DirCopy{ public static void main(String[] args) throws IOException{ //创建源文件夹对象 File src = new File("E:\\JAVAPractice\\IO\\demo"); //创建目标文件夹对象 File dest = new File("E:\\JAVAPractice\\IO\\democopy"); dest.mkdir(); //获取源文件夹中所有对象 File[] files = src.listFiles(); //迭代 for(File f : files){ //将所有文件包装成输入流对象 FileInputStream in = new FileInputStream(f); //i表示读取的字节数 int i = -1; byte[] b = new byte[1024]; //准备输出流对象 File fileOut = new File(dest,f.getName()); FileOutputStream out = new FileOutputStream(fileOut); while((i = in.read(b)) != -1){ out.write(b,0,i); out.flush(); } out.close();//out在foreach内定义,所以在foreach内关闭 in.close();//同上 } System.out.println("操作完成"); } }
以上是关于OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream(示的主要内容,如果未能解决你的问题,请参考以下文章