IO- IO 包中的其他对象:
- 1 打印流
- PrintStream:
- 是一个字节打印流,System.out 对应的类型就是PrintStream
- 它的构造函数可以接受三种数据类型的值
- 1 字符串路径
- 2 File 对象
- 3 OutputStream
- PrintStream(File file, String csn)
- 创建具有指定文件名称和字符集且不带自动行刷新的新打印流。
- PrintStream(OutputStream out, boolean autoFlush, String encoding)
- 创建新的打印流。
- PrintStream(String fileName, String csn)
- 创建具有指定文件名称和字符集且不带自动行刷新的新打印流。
-
- PrintWriter
- 是一个字符打印流。构造函数可以接受四种类型的值。
- 1 字符串路径
- 2 File 对象
- 对于1 2类型的数据,还可以指定编码表,即字符集
- 3 OutputStream
- 4 Writer
- 对于3 4类型的数据,可以指定自动刷新
- 注意:该自动刷新值为true时,只有三个方法可以用:println,printf,format
-
- 如果要自动刷新,有可以指定编码,应该如何进行封装?
- PrintWriter pw = new PrintWriter((new OutputStreamWriter(new FileOutputStream("1.txt")),"utf-8"),true);
- 加缓冲
- PrintWriter pw = new PrintWriter(
- BufferedWriter(new OutputStreamWriter(new FileOutputStream("1.txt")),"utf-8"),true));
- 2、管道流
- PipedInputStream
- PipedOutputStream
- 特点:
- 读取管道流和写入管道流可以进行连接。
- 连接方式:
- 1 通过两个流对象的构造函数
- 2 通过调用两个对象的connect()方法
- 注意:通常两个流在使用时,需要加入多线程技术,也就是让读写同时运行。
- 因为read()方法是阻塞式的,也就是说没有数据的情况下,该方法会等待。
- 3、 RandomAccessFile
- 该对象并不是流体系中的一员。该对象中封装了字节流,同时还封装了一个
- 缓冲区(字节数组),通过内部的指针来操作数组中的数据。
- 该对象的特点:
- 1 该对象只能操作文件,所以构造函数接受两种类型的参数。
- a 字符串路径
- b File 对象
- 2 该对象既可以对文件进行读取,也可以进行写入
- 在进行对象实例化时,必须要指定指定该对象的操作模式,r rw
- RandomAccessFile(File file, String mode)
- 创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。
- RandomAccessFile(String name, String mode)
- 创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。
-
- 该对象有直接操作基本数据类型的方法
- int read()
- 从此文件中读取一个数据字节。
- int read(byte[] b)
- 将最多 b.length 个数据字节从此文件读入 byte 数组。
- int read(byte[] b, int off, int len)
- 将最多 len 个数据字节从此文件读入 byte 数组。
- byte readByte()
- 从此文件读取一个有符号的八位值。
- char readChar()
- 从此文件读取一个字符。
- double readDouble()
- 从此文件读取一个 double。
- float readFloat()
- 从此文件读取一个 float。
- void readFully(byte[] b)
- 将 b.length 个字节从此文件读入 byte 数组,并从当前文件指针开始。
- void readFully(byte[] b, int off, int len)
- 将正好 len 个字节从此文件读入 byte 数组,并从当前文件指针开始。
- int readInt()
- 从此文件读取一个有符号的 32 位整数。
- String readLine()
- 从此文件读取文本的下一行。
-
- write(int b); 写入1个字节,高位丢弃
- writeInt(int b);写入四个字节
- 该对象独特的 方法:
- skipBytes():跳过指定的字节数
- seek();指定指针的位置
- getFilePointer();获取指针的位置
- 通过这些方法,就可以完成对一个文件数据的随机访问。
- 该对象可以读数据,可以写数据,如果写入位置已有数据,原数据会被覆盖,
- 即可以修改数据。
- 注意:该对象在实例化时,如果要操作的文件不存在则自动建立。
- 如果操作的文件存在,则不会建立,如果存在的文件有数据。
- 在没有指定指针位置的情况下,写入数据,数据会从头开始写。
- 对于数据有规则或者分段的数据,可以使用多线程,分段写入数据,提高速率。
复制代码
|
|