Javaday30 IO流中常用的流

I/O流中常用的流

  • 如果是对多媒体文件而言,最好使用字节流
    1. FileOutPutStream
    2. FileIntPutStream
    3. BufferedInPutStream
    4. BufferedOutPutStream
  • 如果是对文本文件最好使用字符流
    1. BufferedReand
    2. PrintWriter

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

FileOutPutStream和FileInPutStream

FileOutPutStream

文件字节输出流:

  • 三种构造方法:

    1. FileOutputStream(File file),传入一个相对应的一个File 对象

    2. FileOutputStream(String path);传入文件的路径(绝对路径和相对路径-----默认当前目录下)

      如果该文件不存在就会自动创建文件,如果文件已经存在,那么会先清空该文件中的数据

    3. FileOutputStream(File file,boolean b),参数b为ture时为,数据会以追加的方式输出,默认情况下为false

  • FileOutputStream的常用方法

    1. write(int b) 指定某一个字节输出到对应的文件中
    2. write(byte[] data) 将一个字节数组里面的元素输出到对应文件
    3. write(byte[] data,int off,int len) 将指定字节数组从下标off开始的len个字节输出到对应·文件(建议使用这个)
    4. flush();清空缓冲区数据,数据写到文件会创建一个通道----缓冲区,而数据正是通过这个缓冲区流入文件中,假设程序中的字节已经全部写出并且关闭了通道,那么可能会有一部分字节还留在缓冲区,还没流到文件时候,就已经关闭了通道,这样就会导致一部分字节会丢失,所以要在管道关闭之前,清空缓冲区数据
    5. close() 关闭文件输入流

FileIntPutStream

文件字节输入流:

  • 构造方法:

    1. FileInputStream(String name),通过文件路径查找对应的文件

    2. FileInputStream(File file),通过File对象来查找对应的文件

      如果需要查找的文件不存在,那么就会抛出FileNotFoundException异常

    3. FileInputStream(FileDescriptor fdObj) FileDescriptor 是“文件描述符”,可以被用来表示开放文件、开放套接字等

  • FileIntPutStream中常用的方法

    1. rean() 读取一个字节数据并返回,当返回类型为int,当返回-1时候表示数据读取完毕
    2. rean(byte[] data) 将文件数据读取到对应的数组中,如果数组长度大于数据总字节长度,那么直接一次读取完毕,如果小于的话,就会分多次读取到数组中
    3. int read(byte[] data,int off,int len) 从data数组off下标开始位置,读取len个字节到data数组(建议使用这种方法)
    4. 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

  • 构造方法
    1. BufferedInputStream(InputStream in) 需要传入一个字节输入流对象,
    2. BufferedInputStream(InputStream in, int size) 需要传入一个字节输入流对象和缓冲区数组的大小,如果不指定的话,默认时8192个字节
  • BufferedInputStrem常用的方法
    1. read()从缓冲区中去读取一个字节
    2. read(byte b[],int off,int len) 从缓冲区中读取数据一个数组中,并且从off位置开始,长度为len
    3. skip(long n) 跳过字节的数,跳过部分不会被读取
    4. close() 关闭输入流

BufferedOutputStream

  • 构造方法
    1. BufferedOutputStream(OutputStream out)需要传入一个字节输出流 对象
    2. BufferedOutputStream(OutputStream out, int size)需要传入一个字节输出流对象,创建时指定大小size的缓冲输出流,不指定的话,默认数组大小为8192字节
  • BufferedOutputStream常用的方法
    1. write(int b)—将数据b写到缓冲数组buf中.
    2. write(byte b[],int off, int len)—将字节数组b中off索引开始,长度为len个字节写到缓冲区中.
    3. 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

  • 构造方法
    1. BufferedReader(Reader in)需要传入一个字符输出流 对象
    2. BufferedReader(Reader in, int sz) 需要传入一个字符输出流 对象,并且要传入缓冲区数组大小,如果不指定大小,就默认大小是8192
  • BufferedReand常用的方法
    1. read() 读取单个字符
    2. read(char[] cbuf) 一次读取一个数组,读取的字符数,如果已到达流的末尾,则返回 -1
    3. readLine() 读取一个文本行,一行的标识换行 (’\n’)、回车 (’\r’) ,如果已到达流末尾,则返回 null
    4. close() 关闭流
    5. skip(long n) 跳过指定字符不读取
    6. 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去了解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值