IO流
Demo 源码:
https://github.com/huangzhenshi/IO_NIO_NIO2Dem
博客
IO 流相关
IO流主要类的继承关系图
https://www.cnblogs.com/biehongli/p/6074713.html
精华
- 实现文本或者字节的读写操作(区分带缓冲和不带缓冲、字符集设置等)
- 四个重要的类
InputStream(字节输入流 抽象类)和Reader(字符输入流)通俗的理解都是读(read)的。
OutputStream(字节输出流 抽象类)和Writer(字符输出流)通俗的理解都是写(writer)的。
字符流
注意事项:
写入文件后必须要用flush()刷新。
用完流后记得要关闭流
使用流对象要抛出IO异常
定义文件路径时,可以用“/”或者“\”。
在创建一个文件时,如果目录下有同名文件将被覆盖。
在读取文件时,必须保证该文件已存在,否则出异常
- 中文不会乱码,默认GBK
文本流
FileWriter 写入字符到文件中
//直接写,有则覆盖FileWriter fw = new FileWriter("C:\\Users\\502764158\\Desktop\\io\\1.txt");fw.write("hello world!");fw.flush();//文本续写FileWriter fw = new FileWriter("C:\\Users\\502764158\\Desktop\\io\\1.txt",true);FileReader 读取一个字节或者一个字节数组
FileReader fr = new FileReader("C:\\Users\\502764158\\Desktop\\io\\1.txt");int ch = 0;while ((ch=fr.read())!=-1) {sop((char)ch);}读写复制
FileWriter fw = new FileWriter(destination);FileReader fr = new FileReader(source);char [] buf = new char[1024];int num = 0;while((num = fr.read(buf))!=-1) {fw.write(new String(buf,0,num));}fr.close();fw.close();
文本缓冲流
套用缓冲流后,调用readLine()–>读取一行, bfw.newLine() –> 换行
字节流
字节流和字符流的基本操作是相同的,但是要想操作媒体流就需要用到字节流。
字节流因为操作的是字节,所以可以用来操作媒体文件。(媒体文件也是以字节存储的)
读写字节流:InputStream 输入流(读)和OutputStream 输出流(写)
字节流操作可以不用刷新流操作。
InputStream特有方法:
int available();//返回文件中的字节个数
注:可以利用此方法来指定读取方式中传入数组的长度,从而省去循环判断。但是如果文件较大,而虚拟机启动分配的默认内存一般为64M。当文件过大时,此数组长度所占内存空间就会溢出。所以,此方法慎用,当文件不大时,可以使用。
- 字节流缓冲流注意事项:
read():会将字节byte()提升为int型值
write():会将int类型转换为byte()类型,保留最后的8位。
字节缓冲流要指定缓冲的size,不指定的话,默认就是8192
private static int defaultBufferSize = 8192;public BufferedInputStream(InputStream in) {this(in, defaultBufferSize);}
File 类
参考 :
https://www.cnblogs.com/biehongli/p/6074713.html
重要的方法:
- isFile()
- isDirectory()
- exits()
- file.list()