字节输入流:InputStream(抽象类)
字节输出流:OutputStream(抽象类)
FileOutputStream为OutpuStream的子类
其中包括的构造方法为:
FileOutputStream(File file)
创建一个向指定 File
对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
其中成员方法包括:
close()
关闭此文件输出流并释放与此流有关的所有系统资源。
write(byte[] b)
将 b.length
个字节从指定 byte 数组写入此文件输出流中。
write(byte[] b, int off, int len)
将指定 byte 数组中从偏移量 off
开始的 len
个字节写入此文件输出流。
write(int b)
将指定字节写入此文件输出流。
FileOutputStream fos = FileOutputStream("fos.txt");
fos.write("Hello World".getBytes());
fos.colse();
以上代码表示 将创建一个字节输出流对象fos指向文件fos.txt,创建fos.txt这个文件,然后将Hello World转换成byte类型然后写入到fos.txt文件中。
FileIntputStream是InputStream的子类
构造方法与FileOutputStream类似
FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个 FileInputStream
,该文件通过文件系统中的路径名 name
指定。
成员方法也类似
read()
从此输入流中读取一个数据字节。
read(byte[] b)
从此输入流中将最多 b.length
个字节的数据读入一个 byte 数组中。
read(byte[] b, int off, int len)
从此输入流中将最多 len
个字节的数据读入一个 byte 数组中。
close()
关闭此文件输入流并释放与此流有关的所有系统资源。
实操:将一个文件复制到另一个另一个文件
代码如下
1 FileInputStream fis = new FileInputStream("OutputStreamDemo.java"); 2 FileOutputStream fos = new FileOutputStream("c.java"); 3 4 //2.读取数据源中的数据,将读取到的数据写入目的地中 5 int by; 6 while ((by=fis.read())!=-1) { 7 //System.out.println(by); 8 //将读取到的字节写入fos中 9 fos.write(by); 10 } 11 12 //释放资源 13 fos.close(); 14 fis.close();
字符缓冲区流(也叫高效流):
构造方法:
BufferedInputStream(InputStream in)
创建一个 BufferedInputStream
并保存其参数,即输入流 in
,以便将来使用。
成员方法:
继承了父类的read方法。
BufferedOutputStream
BufferedOutputStream(OutputStream out)
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
成员方法:
继承自父类的write()方法。
低级流:基本的流,可以直接操纵文件。
高级流:是操作基本流的流。
练习代码如下
1 //封装数据源和目的地 2 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D://b.mp4")); 3 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("j.mp4")); 4 5 //一次读写一个字节数组 6 byte[] byf = new byte[1024]; 7 int len; 8 while ((len = bis.read(byf))!=-1) { 9 bos.write(byf, 0, len); 10 } 11 12 13 //3.关流 14 bos.close(); 15 bis.close();
字符流
Reader(抽象类)
Writer(抽象类)
InputStreamReader
构造方法:
InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader。
成员方法:
read(char[] cbuf, int offset, int length)
将字符读入数组中的某一部分。
OutputStreamWriter
OutputStreamWriter 是字符流通向字节流的桥梁
构造方法:
OutputStreamWriter(OutputStream out)
创建使用默认字符编码的 OutputStreamWriter。
成员方法:
write(String str, int off, int len)
写入字符串的某一部分。
write(char[] cbuf, int off, int len)
写入字符数组的某一部分。
write(int c)
写入单个字符。
flush()
刷新该流的缓冲。
FileReader和FileWriter分别为InputStreamReader和OutputStreamWriter的子类。
其构造方法为分别为
FileReader(File file)
在给定从中读取数据的 File 的情况下创建一个新 FileReader。
FileReader(String fileName)
在给定从中读取数据的文件名的情况下创建一个新 FileReader。
FileWriter(File file)
根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(String fileName)
根据给定的文件名构造一个 FileWriter 对象。
练习代码如下:
1 //1.封装数据源和目的地 2 FileReader fr = new FileReader("InputStreamReaderDemo.java"); 3 FileWriter fw = new FileWriter("d.java"); 4 5 6 //一次读写一个字符数组 7 char[] chs = new char[1024]; 8 int len; 9 while ((len=fr.read(chs))!=-1) { 10 fw.write(chs, 0, len); 11 fw.flush(); 12 } 13 14 15 //3.关流 16 fw.close(); 17 fr.close();
方法flush和close的区别
flush:刷新缓冲区,流对象可以继续使用。
close:先刷新缓冲区,再关闭流对象。流对象不可以再使用。
高效字符流:
BufferedReader:字符缓冲输入流
构造方法:
BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
特有方法:
readLine()
读取一个文本行。
BufferedWriter:字符缓冲输出流
构造方法:
BufferedWriter(Writer out)
创建一个使用默认大小输出缓冲区的缓冲字符输出流。
特有方法:
newLine()
写入一个行分隔符。
利用高效字符流一次复制一行的复制文件。
代码如下
1 BufferedReader br = new BufferedReader(new FileReader("InputStreamReaderDemo.java")); 2 BufferedWriter bw = new BufferedWriter(new FileWriter("copy.java")); 3 4 //读取一行写一行 5 String line; 6 while ((line = br.readLine())!=null) { 7 //System.out.println(); 8 bw.write(line); 9 bw.newLine(); 10 bw.flush(); 11 } 12 13 //释放资源 14 bw.close(); 15 br.close();