学习总结:
一,字节流与字符流
在Java中IO操作的步骤:
a,使用File类打开一个文件
b,通过子节流或字符流的子类指定输出的位置
c,进行读/写的操作
d,关闭输入操作
1),字节流:
字节流主要是操作byte类型数据,以byte数组为准,主要操作类为OutputStream和InputStream类
1,字节输出流:OutputStream
作用:向文件中写入文件
此类定义:
public abstract class OutputStream extends Object implements Closeable,Flushable
常用方法:
方法或常量 | 类型 | 描述 |
public void close() throws IOException | 普通 | 关闭输出流 |
public void flush() throws IOException | 普通 | 刷新缓冲区 |
public void write(byte[]b) throws IOException | 普通 | 将一个byte数组写入数据流 |
public void write(byte[]b,int off,int len) throws IOException | 普通 | 将一个指定范围的byte数组写入数据流 |
public abstract void write(int b) throws IOException | 普通 | 将一个字节数据写入数据流 |
FileOutputStream子类构造方法:
public FileOutputStream(File file)throws FileNoFoundException
2,追加新内容:
如果重新执行程序,则肯定会覆盖文件中的已有内容,那么可以通过FileOutputStream类的另一中构造方法进行实例化,先文件追加内容,方法如下:
public FileOutputStream(File file,boolean append) throws FileNotFoundException
3,字节输入流:InputStream
定义:向文件中读取内容
public abstract class InputStream extends Object implements Closeable
常用方法:
方法或常量 | 类型 | 描述 |
public int available() throws IOException | 普通 | 可以取得输入文件的大小 |
public void close() throws IOException | 普通 | 关闭输入流 |
public abstract int read() throws IOException | 普通 | 读取内容,以数字的方式读取 |
public int read(byte[]b) throws IOException | 普通 | 将内容读到byte数组之中,同时返回读入数组的个数 |
FileInputStream类的构造方法如下:
public FileInputStream(File file) throws FileNotFoundException
注意:两个类是一抽象类,如果要想使用两类中的任意一类话,首先实例化对象。如果现在要操作的是一个文件,则可以使用FileOutputStream类或FileInputStream类,通过向上转型后,可以为OutputStream或InputStream实例化
在File类中存在一个length()方法,可通过此方法取得文件的大小
2),字符流:
1,字符输出流:Writer
此类定义:
public abstract class Writer extends Object impleenments Appendable,Closeable,Flushable
常用方法:
方法或常量 | 类型 | 描述 |
public abstract void close() throws IOException | 普通 | 关闭输出流 |
public void write(String str) throws IOException | 普通 | 将字符串输出 |
public void write(char[] cbuf) throws IOException | 普通 | 将字符数组输出 |
public abstract void flush() throws IOException | 普通 | 强制性清空缓存 |
FileWrite类的构造方法定义:
public FileWrite(File file) throws IOException
2,字符输入流:Reader
定义:
public abstract class Reader extends Object implements Readable,Closeable
常用方法:
方法或常量 | 类型 | 描述 |
public abstract void close() throws IOException | 普通 | 关闭输出流 |
public int read() throws IOException | 普通 | 读取单个字符 |
public int read(char[] cbuf) throws IOException | 普通 | 将内容读到字符数组之中,返回读入的长度 |
FileReader的构造方法定义:
public FileReader(File file) throws FileNotFoundException
注意:两个类也是抽象类,如果要使用两类中的任意一类话,则使用其子类,如果是向文件中写入内容,应该使用FileWrite的子类,如果是读取文件中的内容,应该使用FileReader的子类
3,区别:
a,操作代码不同
b,字节流在操作时本身不需要用到缓冲区(内存),是于文件本身直接操作,而字符流在操作时需要用到缓冲区,通过缓冲区在操作文件
缓冲区的概念:
可理解为一个特殊的内存,存储一些需要频繁使用的资源(文件或数据库),从而提高程序性能。
二,转换流:
OutputStreamWriter类:是writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流输出对象
InputStreamWriter类:是Reader的子类,将输出的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象
三,内存操作流:
字节内存流:ByteArrayInputStream(内存子节输入流),ByteArrayOutputStream(内存字节输出流),作用:将内容写入内存中
字符内存流:CharArrayReader(内存字符输入流),CharArrayWriter(内存字符输入流),作用:将内存中的数据输出
ByteArrayInputStream类的主要方法:
方法 | 类型 | 描述 |
public ByteArrayInputStream(byte[] buf) | 构造 | 将全部的内容写入内存中 |
public ByteArrayInputStream(byte[] buf,int offset,int length) | 构造 | 将指定范围的内容写入到内存中 |
ByteArrayOutputStream类的主要方法:
方法 | 类型 | 描述 |
public ByteArrayOutputStream() | 构造 | 创造对象 |
public void writer(int b) | 构造 | 将内容从内存中输出 |
四,打印流:
作用:提高输出数据的编写效率,实现输出数据的功能。
主要包含:字节打印流(PrintStream)和字符打印流(PrintWriter)
PrintStream类的常用方法:
方法 | 类型 | 描述 |
public PrintStream(File file) throws FileNotFoundException | 构造 | 通过一个File对象实例化PrintStream类 |
public PrinStream(OutputStream out) | 构造 | 接收OutputStream对象,实例化PrintStream类 |
public PrintStream printf(Locale l,String format,Object... args) | 普通 | 根据指定的Locale进行格式化输出 |
public PrintStream printf(String format,Object.. args) | 普通 | 根据本地环境格式化输出 |
public void print(boolean b) | 普通 | 此方法被重载很多次,输出任意数据 |
public void println(boolean b) | 普通 | 此方法被重载很多次,输出任意数据后换行 |
使用打印流进行格式化:
(直接使用printf()方法进行格式化)
字符 | 描述 |
%s | 表示内容为字符串 |
%d | 表示内容为整数 |
%f | 表示内容为小数 |
%c | 表示内容为字符 |