File类
File类,文件和目录的抽象表示,创建,删除,获取,判断,遍历,大小。在使用过程中特别注意大小写对文件的影响或者一些异常。
pathSeparator路径分割符(静态成员变量)等,用于兼容各种路径分隔符在不同操作系统下。路径添加转义符号\\。
构造方法传入路径获取该文件或文件夹(无所谓存在与否),获取对象。传入父路径和子路径,获取文件或文件夹。构造方法传入文件对象父路径和子路径。
getAbsolutePath方法,getPath方法,getName方法,length方法获取文件大小(字节为单位)。list方法获取所有子文件和目录(String数组),listFiles方法获取文件和目录(File数组)
exists判断文件或文件夹存在性,isDirectory是目录,isFile是文件。createNewFile创建空文件,delete删除文件或目录,mkdir创建单级文件夹,mkdirs创建多级文件夹。
listFiles方法传入过滤器
FileFilter用于过滤文件(File)的接口,其中的accept方法,用于测试路径名是否包含。自定义过滤器。
FilenameFilter用于过滤文件名接口,其中accept方法,测试文件名是否包含在列表中。
输入输出流
输入:硬盘-->内存 输出:内存-->硬盘。1字节=1byte
OutputStream输出流,close方法关闭输出流,释放关联资源。flush方法刷新输出流,缓存字节写出。write写入(传入字节数组[可写入中文,首字节为负],可选数组偏移和长度,或字节比特[非字符])。
FileOutputStream,构造方法传入字符串,创建一个写入到文件的输出流。传入File对象,向File对象表示否文件写入文件数据。String的getBytes方法,将字符串转换为字节数组,方便写入
构造方法传入两个参数,第二个参数定义为追加写开关,默认flase(重建文件写)。Linux的换行/n,Windows换行\r\n,Mac换行/r。用于写入换行
InputStream输入流,close关闭,read方法(读取一个字节,字节数组)。
FileInputStream,传入对象或字符串等创建对象。读取过程中自动的指针移动。读取到末尾长度为-1(windows结束标记的JVM返回值)。
读取字节数组时,read传入byte数组[定义好一次读取的长度,一般定义为1024]调用,获取读取的byte数组,并返回获取长度。使用new String(bytes)构造方法,将字节数组转化为字符串。
字符流
Reader字符流[非字节流],针对中文等非ASCII读写。read(读字符,字符数组)方法,close关闭。
FileReader类,构造方法传入对象或字符串表示文件后,调用其继承的方法读取[单个或多个字符],可读取中文。
Writer字符输出流,包括write(单个字符,字符数组,可选偏移,字符串,字符串可选偏移),close,flush等方法。
FileWriter类,创建对象后,使用write写入(自动将字符转换为字节,暂写内存[不同于写字节]),然后数据刷新flush方法刷新到文件中。close方法关闭流,也会执行flush。
续写和换行和字节流相同。异常(IOException)的处理使用try catch finally结构,finally中写入释放资源的方法,并再次引入try catch解决finally中的异常。
JDK7以后,在try后添加括号,填入声明流对象,在{}中添加方法,运行完毕自动释放<--更优。JDK9可以在try()中添加外部声明后的流对象,也会自动释放。
IO流与HashTable
Properties集合类,继承了HashTable集合,实现了Map接口,key和value默认为字符串。
store方法(字节输出流或字符输出流,[英文注释])数据写入硬盘,
load方法(字节输入流或字符输入流)数据读取到内存。读取的数据是非注释行数据(#),分隔符可以是空格,等号等作为键值对分隔符
setProperty方法,对应Hashtable的put(key,value)方法,getProperty方法,对应get(key)方法,stringPropertyNames对应keySet方法获取键集。
创建集合后,放入数据,使用store或load方法即可。
缓冲流
缓冲流,给基本流增加缓冲区,缓冲区数组批量处理,进一步提高效率(相比单字节处理和多字节处理)。
BufferedOutputStream字节缓冲输出流,构造方法中传入字节输出流(可选大小)创建对象后,使用其write方法写入数据,使用其flush刷新,使用close关闭。
BufferedInputStream字节缓冲输入流,构造方法中传入字节输入流(可选大小),使用其read方法等,读取数据,使用close关闭。读取方法相同。
BufferedWriter,创建缓冲字符输出流,构造方法传入字符输出流,使用newline方法写入行分隔符。使用write,flush写入,close关闭。
BufferedReader,创建缓冲字符输入流,构造传入输入流,使用readline方法读取一行(终止符号为\r\n或\r等,不读取)。读取单个或多个字符使用read方法,close关闭。读取到空位结束(非-1)
HashMap中的key自动排序(遍历)。
转换流
转换流,字符编码,ISO字符集,拉丁码表。GB中国国标,GB2312
InputStreamReader,通过默认UTF-8或指定码表解码字节流读取。OutputStreamWriter流,以默认码表或自定义码表将字符流转换为字节流。
OutputStreamWriter类,通过构造方法传入FileOutputStream(OutputStream及子类)(可选编码表),创建对象,write写入缓冲,flush刷新到文件中,close关闭。
InputStreamReader类解码,构造方法传入InputStream(FileOutputStream及子类)(可选编码表),创建对象,read读取,close关闭。
序列化流
序列化流,把对象以流的方式写入到流中保存,对象的序列化ObjectOutputStream。反序列化流,以流的方式读取对象,对象的反序列化ObjectInputStream。
类的序列化功能需要实现Serializable接口,给类添加标记(没有内容)。显式声明序列号,在该接口实现中声明final long serialVersionUID,以便于反序列化成功。
序列化后修改class文件(序列号被改变),无法反序列化(序列号与文件中无法对应)。
创建ObjectOutputStream,构造方法传入FileOutputStream,通过writeObject将对象写入到文件中,最后关闭close。
ObjectInputStream的构造方法传入FileInputStream,通过readObject从文件中读取对象,最后关闭close。对象Object o强转,可以使用其方法,访问变量等。
transient瞬态关键字(静态成员变量不能被序列化),也用于标记不被序列化的成员变量。
打印流
打印流,PrintStream,用于数据输出(print,println等)。构造方法传入流,文件,路径等表示输出的目的地。
有close,flush,write等方法(继承了OutputStream)。也有print,println方法。
System.setOut方法,传入打印流对象,可以将System.out.println的输出重定向到指定位置。