IO流
/**
* 1GB=1024M
* 1M=1024KB
* 1KB=1024B
*java.io.File类:可以描述文件或目录
*构造函数:
*File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
*常用方法:
*long getTotalSpace():分区的大小,以字节为单位;
*file.getFreeSpace();获取分区中未分配的字节数。 ,以字节为单位
*getPath():返回此对象表示的文件的相对路径名
String getAbsolutePath( ):返回此对象表示的文件的绝对路径名
*/
/**
* Java流的分类:
1.按方向分为输入流和输出流(相对于计算机的内存来说,而不是相对于目标或源来说)
输入流: InputStream/Reader
输出流:OutputStream/Writer
2.按读写单位分为字节流(8位)和字符串流(16位)
字节流(字节输入流:InputStream和字节输出流OutputStream)
字符流(字符输入流:Reader和字符输出流Writer)
3.按功能分节点流和处理流
节点流:可以直接从数据源或目的地读写数据
处理流:(包装流):不直接连接到数据源或目的地,是其他流进行封装。目的主要是简化操作和提高性能。
* InputStream/OutputStream都是抽象类,不能实例化。
* java.io.FileInputStream类继承了java.io.InputStream
* 常用的构造方法:
* FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream
* 其中有一个检查异常需要捕获:FileNotFoundException
* 常用方法:
* read():从此输入流中读取一个数据字节。 如果已到达文件末尾,则返回 -1 ,其中有一个检查异常需要捕获:IOException
* close():其中有一个检查异常需要捕获:IOException
*
* 利用FileInputStream读取中文文本时出现乱码?
* 原因:中文汉字占用1个字符(2个字节),FileInputStream每次读取1个字节,利用字符输入流解决
*/
/**
* 字符串的构造函数
* String(byte[] bytes)通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
* String(byte[] bytes, int offset, int length)通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
* 构造函数:
* FileInputStream(File file)
* 常用方法:
* read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
*/
/**
* FileOutputStream类继承了OutputStream(抽象类)
* 构造函数:
* FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。
* FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。
* FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。。
* FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流
* 注意:
* 1.FileOutputStream(File file)或FileOutputStream(String name)构造函数时 ,写入文件内容时会发生覆盖
* 2.FileOutputStream(File file,boolean append)或FileOutputStream(File file, boolean append)时,
* 当append为true,会追加内容
* 3.FileOutputStream写入文件内容,如果文件不存在,将自动创建。
*
* 常用的方法:
* write(byte[] b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中。
* write(int b) 将指定字节写入此文件输出流
* write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
* close() 关闭流
*
*/
/**
*字符流:以字符为单位进行读取
*使用场景:如果读取文本内容时推荐使用字符流进行读取(一个汉字占用的两个字节(一个字符))
*两个抽象基类
* Reader:用于读取字符流的抽象类。
* FileReader:是Reader的子类
* FileReader的构造函数
* FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。
* FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。
* 注意:在创建FileReader对象时需要捕获一个检查异常:FileNotFoundException
* 常用方法:
* int read():读取单个字符。 有一个检查异常需要捕获IOException
* int read(char[] cbuf, int offset,int length):将字符读入数组中的某一部分。
close() 关闭该流并释放与之关联的所有资源。 有一个检查异常需要捕获IOException
* Writer:
*
*/
/**
* String(char[] value):分配一个新的 String,使其表示字符数组参数中当前包含的字符序列
* String(char[] value, int offset, int count) 分配一个新的 String,它包含取自字符数组参数一个子数组的字符。
*字符流:以字符为单位进行读取
*使用场景:如果读取文本内容时推荐使用字符流进行读取(一个汉字占用的两个字节(一个字符))
*两个抽象基类
* Reader:用于读取字符流的抽象类。
* FileReader:是Reader的子类
* FileReader的构造函数
* FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。
* FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。
* 注意:在创建FileReader对象时需要捕获一个检查异常:FileNotFoundException
* 常用方法:
* int read():读取单个字符。 有一个检查异常需要捕获IOException
* int read(char[] cbuf, int offset,int length):将字符读入数组中的某一部分。
close() 关闭该流并释放与之关联的所有资源。 有一个检查异常需要捕获IOException
* Writer:
*
*/
/**
* 捕获异常的快捷键:alt+shift+z
*BufferedReader类:继承了Reader类,带缓冲区的输入流,提高读的效率
*按功能划分属于处理流,必须结合节点流进行使用,不能单独使用
*构造函数:
*BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。
*BufferedReader(Reader in, int size) 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
*常用方法:
* readLine() 读取一个文本行。
* close() 关闭该流并释放与之关联的所有资源
*/