如果没有特殊要求的情况下,上述的流可以泛用于各种情况。
FileOutPutStream
文件字节输出流:
三种构造方法:
FileOutputStream(File file),传入一个相对应的一个File 对象
FileOutputStream(String path);传入文件的路径(绝对路径和相对路径-----默认当前目录下)
如果该文件不存在就会自动创建文件,如果文件已经存在,那么会先清空该文件中的数据
FileOutputStream(File file,boolean b),参数b为ture时为,数据会以追加的方式输出,默认情况下为false
FileOutputStream的常用方法
write(int b) 指定某一个字节输出到对应的文件中write(byte[] data) 将一个字节数组里面的元素输出到对应文件write(byte[] data,int off,int len) 将指定字节数组从下标off开始的len个字节输出到对应·文件(建议使用这个)flush();清空缓冲区数据,数据写到文件会创建一个通道----缓冲区,而数据正是通过这个缓冲区流入文件中,假设程序中的字节已经全部写出并且关闭了通道,那么可能会有一部分字节还留在缓冲区,还没流到文件时候,就已经关闭了通道,这样就会导致一部分字节会丢失,所以要在管道关闭之前,清空缓冲区数据close() 关闭文件输入流FileIntPutStream
文件字节输入流:
构造方法:
FileInputStream(String name),通过文件路径查找对应的文件
FileInputStream(File file),通过File对象来查找对应的文件
如果需要查找的文件不存在,那么就会抛出FileNotFoundException异常
FileInputStream(FileDescriptor fdObj) FileDescriptor 是“文件描述符”,可以被用来表示开放文件、开放套接字等
FileIntPutStream中常用的方法
rean() 读取一个字节数据并返回,当返回类型为int,当返回-1时候表示数据读取完毕rean(byte[] data) 将文件数据读取到对应的数组中,如果数组长度大于数据总字节长度,那么直接一次读取完毕,如果小于的话,就会分多次读取到数组中int read(byte[] data,int off,int len) 从data数组off下标开始位置,读取len个字节到data数组(建议使用这种方法)close()关闭文件输入流简单的例子:
public class Test { public static void main(String[] args) throws Exception { //创建输入输出流,并且设置为追加模式 //文件输出流,没有该文件就创建,参数为相对路径 FileOutputStream stream = new FileOutputStream("A.txt",true); //文件输入流,参数为相对路径 FileInputStream in = new FileInputStream("A.txt"); //创建一个数组用于输入数据 byte[] b ="石原里美".getBytes(); //数组数据写入到相应文件中 stream.write(b); stream.flush();//清空缓冲区数据 //创建一个数组用于接收读取的数据 byte[] buf = new byte[1024]; //定义一个变量,用来判断是否读取完毕 int len = -1; //读取到相应的数组 rend()这个方法一次只能读取一个字节 while((len = in.read(buf))!=-1) { //打印数组,查看是否读取成功 System.out.println(Arrays.toString(buf)); } //关闭流 in.close(); stream.close(); } } 注意输出的结果是十进制的unicode值这个两个都是缓冲流,
缓冲流:以往我们读取写入数据都是一个一个来进行,而缓冲流的作用就是用一个数组将要传输的数据保存下来,直接传输这个数组,就不需要一个一个的数据传输。
减少系统磁盘的IO次数,从而提高读写的效率
注意,缓冲流本身并不能传输数据,必须要依托于其他流。
BufferedInputStrem
构造方法 BufferedInputStream(InputStream in) 需要传入一个字节输入流对象,BufferedInputStream(InputStream in, int size) 需要传入一个字节输入流对象和缓冲区数组的大小,如果不指定的话,默认时8192个字节 BufferedInputStrem常用的方法 read()从缓冲区中去读取一个字节read(byte b[],int off,int len) 从缓冲区中读取数据一个数组中,并且从off位置开始,长度为lenskip(long n) 跳过字节的数,跳过部分不会被读取close() 关闭输入流BufferedOutputStream
构造方法 BufferedOutputStream(OutputStream out)需要传入一个字节输出流 对象BufferedOutputStream(OutputStream out, int size)需要传入一个字节输出流对象,创建时指定大小size的缓冲输出流,不指定的话,默认数组大小为8192字节 BufferedOutputStream常用的方法 write(int b)—将数据b写到缓冲数组buf中.write(byte b[],int off, int len)—将字节数组b中off索引开始,长度为len个字节写到缓冲区中.flush()—刷新缓冲区,将缓冲区里面的数据写到输出流中.简单事列
public class Test { public static void main(String[] args) throws Exception { //创建BufferedOutputStream 并传入一个FileOutputStream 对象 BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream("A.txt")); //创建一个输入流 传入一个FileInputStream对象 BufferedInputStream in = new BufferedInputStream(new FileInputStream("A.txt")); //输出一个byte数组 bout.write("石原里美".getBytes()); //刷新缓冲区 bout.flush(); //关闭输出流 ,这个很重要,一定要关闭 bout.close(); byte[] b = new byte[1024]; int leng = -1; while((leng = in.read(b))!=-1) { System.out.println(Arrays.toString(b)); } in.close(); } }简单例子
public class Test { public static void main(String[] args) throws Exception { //创建流,并传入FileReader对象 BufferedReader reader = new BufferedReader(new FileReader("A.txt")); //定义字符串 String str; //判断是否返回值为null while((str = reader.readLine())!=null) { //打印输出读取到的值 System.out.println(str); } //关闭流 reader.close(); } }PrintWriter类可用来创建一个文件并向文本文件写入数据,是一个很强大的类,其构造器有很多
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mNiqvBdu-1599060294704)(C:\Users\石原里美\AppData\Roaming\Typora\typora-user-images\image-20200902232226740.png)]
并且除了一些输出流的常用方法以外,还有该类特有的一些方法
(1)print(String str):向文件写入一个字符串。
(2)print(char[] ch):向文件写入一个字符数组。
(3)print(char c):向文件写入一个字符。
(4)print(int i):向文件写入一个int型值。
(5)print(long l):向文件写入一个long型值。
(6)print(float f):向文件写入一个float型值。
(7)print(double d):向文件写入一个double型值。
(8)print(boolean b):向文件写入一个boolean型值。
public class Test { public static void main(String[] args) throws Exception { PrintWriter writer = new PrintWriter(new File("A.txt")); writer.print("如今你依旧是我的光".toCharArray()); writer.flush(); writer.close(); } }ss Test {
public static void main(String[] args) throws Exception { PrintWriter writer = new PrintWriter(new File("A.txt")); writer.print("如今你依旧是我的光".toCharArray()); writer.flush(); writer.close(); }}
该类的更多方法可以通过API去了解