Javaday30 IO流中常用的流

tech2022-08-21  108

I/O流中常用的流

如果是对多媒体文件而言,最好使用字节流 FileOutPutStreamFileIntPutStreamBufferedInPutStreamBufferedOutPutStream 如果是对文本文件最好使用字符流 BufferedReandPrintWriter

如果没有特殊要求的情况下,上述的流可以泛用于各种情况。

FileOutPutStream和FileInPutStream

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值

BufferedInPutStream和BufferedOutPutStream

这个两个都是缓冲流,

缓冲流:以往我们读取写入数据都是一个一个来进行,而缓冲流的作用就是用一个数组将要传输的数据保存下来,直接传输这个数组,就不需要一个一个的数据传输。

减少系统磁盘的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(); } }

BufferedReand

构造方法 BufferedReader(Reader in)需要传入一个字符输出流 对象BufferedReader(Reader in, int sz) 需要传入一个字符输出流 对象,并且要传入缓冲区数组大小,如果不指定大小,就默认大小是8192 BufferedReand常用的方法 read() 读取单个字符read(char[] cbuf) 一次读取一个数组,读取的字符数,如果已到达流的末尾,则返回 -1readLine() 读取一个文本行,一行的标识换行 (’\n’)、回车 (’\r’) ,如果已到达流末尾,则返回 nullclose() 关闭流skip(long n) 跳过指定字符不读取ready() 用于检查此BufferedReader流是否准备就绪或无法读取

简单例子

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

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去了解
最新回复(0)