IO流:
IO异常处理方式:
1、 流向分:Writer、Reader
Writer共性方法:
void write(char[] cbuf)写入字符数组。
abstract void write(char[] cbuf, int off, int len)写入字符数组的某一部分。
void write(int c) 写入单个字符。
void write(String str)写入字符串。
void write(String str, int off, int len)写入字符串的某一部分
Reader共性方法:
int read() 读取单个字符。
int read(char[] cbuf)将字符读入数组。
abstract int read(char[] cbuf, int off, int len)将字符读入数组的某一部分。
int read(CharBuffer target)试图将字符读入指定的字符缓冲区。
文件字符流:FileWriter、FileReader
字符缓冲流:BufferedWriter、BufferedReader提高流的操作效率,(readLine()调用read方法)(记得要flush()) close()关闭缓冲区就是关闭缓冲区中的流对象。
FileReader------àBufferedReader,
BufferedReader-à LineNumberReader,(加入行号)
FileWriter---àBufferedWriter---------------------装饰设计模式
特有方法:BufferedWriteànewLine(),写入跨平台的换行符。
BufferedReader—>readLine(),读取一行,并不返回换行符
LineNumberReader—>设置获取行号
装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义类将已有的对象传人,基于已有的功能并提供加强功能,那么自定义的该类就称为装饰类。
定义自己的装饰类。
2、 字节流:InputStream、OutputStream
文件字节流:FileInputStream、FileOutputStream:
字节缓冲流:BufferedInputStream、BufferedOutputsStream装饰设计模式
3、 转换流:
写入转换流:OutputStreamWriter(其子类为FileWriter)、
读取转换流:InputStreamReader(其子类为FileReader)
//读取键盘录入:常见写法:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
其中FileWriter和FileReader指定封装了编码的方式为GBK,
而其父类OutputStreamWriter,InputStreamReader可以指定字节流的编码方式,构造时指定。
注意:
1、自定义字节缓冲输入流时,返回一个byte型的数据,用int接收时,byte型数据要与0xff进行&运算(提升),避免byte数是-1时无法读取数据。而write(byte b)在做强转,保证数据的有效性,正确性其实FileInputStream中的read也进行了转换。
2、 当用字符流进行循环write()时,一定要flush();不然看不到结果。
3、 读取键盘输入的最常见写法。流是用来操作数据的。
4、IO操作规律:
1、明确源(InputStream、Reader)(文件必须存在,不存在抛异常)和目的(OutputStream、Writer)(存在则覆盖,不存在则建立)
2、 明确操作的对象:如果为纯文本文件用Reader、Writer
3、 当体系明确后在明确使用哪个具体的对象,
a) 原设备:内存,硬盘,键盘
b) 目的设备:内存,硬盘,控制台
4、 明确是否需要高效:Buffered….
5、IO异常处理方式:
6、标准输入输出重定向:
System.setIn(InputStream in),
System.setOut(PrintStream p)
File类:
1、创建
a) makDir:创建文件夹
b) makDirs:创建多级文件夹
c) createNewFile:在指定位置创建一个文件,如果该文件存在则不创建
i. 和输出流不一样,输出流对象一创建文件,存在则覆盖。
2、 删除
a) delete:出现异常时删不掉
b) deleteOnExit:在程序退出时删除指定文件
3、 判断:
a) exists:文件是否存在。
i. 注意:在判断文件对象是不是文件或目录时,即下面的方法,必须先判断该文件对象封装的内容是否存在
b) isDirectory
c) isFile
4、 获取信息
a) getName getPath getParent getAbsolute length
b) static File[] listRoots():列出机器中的有效盘符;
c) list和加参数的过滤器,调用list方法的对象必须封装了一个目录,该目录还必须存在
d) listFiles
递归文件列表、递归删除文件
Properties类:
1、 是hashTable的子类,具有map集合的特点,存储形式:k=v,存储字符串
2、 与IO流相结合,存取配置文件
打印流:
1、 PrintStream:构造方法:
a) File对象 file
b) 字符串路径
c) 字节输出流OutputStream
2、 PrintWriter:(常用)设置自动刷新
a) File对象 file
b) 字符串路径 fileName
c) 字节输出流OutputStream
d) 字符输出流Writer
序列流,(读取)合并流(字节):
1、 sequenceInputStream:对多个流进行合并。将分流与Vector对象联系起来,得到Eunmeration对象
切割文件:
对象序列化(持久化):
1、 实现Serializable接口,该接口为标识接口
2、 ObjectOutputStream、ObjectInputStream、对应的writeObject()和readObject()方法
3、 静态成员变量不能被序列化,静态成员变量在代码区,而对象在堆内存中。
4、 非静态成员变量不被序列化前面加transient修饰。
5、 Uid类标识,可以自己定义值。方便序列化
管道流(字节和字符):
1、PipedInputStream、PipedOutputStream通过结合线程使用
随机读取:
RandomAccessFile
(1.void seek(long pos)设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作,任意位置
(2. int skipBytes(int n)尝试跳过输入的 n个字节以丢弃跳过的字节。不能往后跳,
操作基本数据类型的流对象:
DataInputStream,DataOutputStream
将流与基本数据类型相结合,构造时传入流对象
用流的思想来操作数据:
操作字节数组的流对象:
ByteArrayInputStream:在构造时需要接收数据源,而该数据源是一个字节数组
ByteArrayOutputStream:在构造时,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组,这就是数据的目的。
因为这两个流对象都操作的数组并没有使用系统资源,所以并不需要关闭流,不抛异常。
操作字符数组的流对象:
CharArrayWriter:
CharArrayReader:
操作字符串:
StringReader:
StringWriter:
字符编码:
编码:字符—>>字节数组
解码:字节数组-à>字符
IO流中可直接操作文件的流对象:
1. FileInputStream,FileOutputStream
2. FileReader,FileWriter
3. PrintStream,PrintWriter
练习1:
package org.cc.io;
import java.io.*;
/*
* 读取显示键盘录入并
*/
public class BufferedReaderKeyBoard {
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str;
while ((str = br.readLine()) != null) {
if ("over".equals(str))
break;
bw.write(str.toUpperCase());
bw.newLine();
bw.flush();
}
} catch (Exception e) {
throw new RuntimeException("br is wrong");
} finally {
if (br != null)
try {
br.close();
} catch (Exception e) {
e.printStackTrace();
}
if (bw != null) {
try {
bw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------