传智播客黑马程序员javaIO流重点总结(必读)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
IO流总结
异常
父类是Throwable,处理异常的两种方案,一种try --catch 另外一种抛出
熟练使用Try---catch---finally,注意:能和try一起使用的只有catch和finally关键字Try块里面存放的是有可能发生异常的代码,通常和catch块一起使用,catch块用于处理try块中抛出的异常,finally块不是必须的,通常将释放资源(例如IO流的close方法)的代码放到finally块里面
注意:finally和Final还有Finalize的区别
File类
注意:File类封装的路径,而不一定是一个具体的文件,File类不能用于读写文件,File类只能用来处理和文件相关的操作
构造方法
* File(String pathname):根据一个路径得到File对象
* File(String parent, String child):根据一个目录和一个子文件/目录得到File对象
* File(File parent, String child):根据一个父File目录和一个子文件/目录得到File对象
创建功能
* public boolean mkdir():创建文件夹如果存在这样的文件夹,就不创建了
* public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
注意:mkdir只能创建单级目录,mkdirs用于创建多级目录
判断功能,
* public boolean isDirectory():判断是否是目录
* public boolean isFile():判断是否是文件
* public boolean exists():判断文件是否存在
注意:判断功能返回的都是布尔类型的
获取功能
* public String getName():获取名称
* public long length():获取长度。字节数
* public File[] listFiles():获取指定目录下的所有文件或者文件夹对象,返回的是File数组
* public File[] listFiles(FilenameFilter filter):注意:此方法需要传入筛选文件名的接口FileNameFilter,用于过滤文件
概念
* Input Output流用来处理设备之间的数据传输,Java中输入输出功能是通过流来实现,把数据写入文件需要创建流对象
* Java对数据的操作是通过流的方式
* Java用于操作流的类都在IO包中
* 流按流向分为两种:输入流,输出流。注意:读取文件都用输入流,写出文件都用输出流
* 流按操作类型分为两种:
* 字节流: 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
* 字符流: 字符流只能操作纯字符数据,比较方便。
注意:IO流父类是java.io包下的抽象类,非接口!
字符流和字节流的区别在于每次读取的字节数不一样,字节流读取的是单个字节,而字符流读取的是单个字符,相当于两个字节.
字节流可以用于任何文件的拷贝,而字符流只能用于拷贝文本文件,通常都用字节流做拷贝,字符流只用于在只读或者只写的情况下.
字节流
|--InputStream(字节输入流,字节流的抽象父类,抽象类不能直接创建对象,必须使用子类)
|--FileInputStream(文件字节输入流,就是以字节的形式读取文件内容)
|--read()每次读取一个字节(byte),但是返回值类型,为int类型,防止出现文件提前结束
|--read(byte[] b)每次读取多个字节,将内容放入字节数组b中
|--BufferedInputStream(字节输入缓冲流,其实就是一个包装类,创建对象时要接收一个InputStream,内部封装了一个1024*8的字节数组)
|--使用BufferedInputStream就不用再定义数组了
|--OutputStream(字节输出流,字节流的抽象父类)
|--FileOutputStream(文件字节输出流,就是以字节的形式将内容写入到文件中)
注意:创建FileOutputStream时候在构造参数里面传入true,可以实现续写功能,即添加数据到末尾.
|--write(int b)一次写出一个字节
|--write(byte[] b)将字节数组b里的内容写入到文件中
|--write(byte[] b, int off, int len)将字节数组b里的内容,从索引为off的位置开始,总共写len个
注意:字节输出流没有直接写出字符串的功能,需要将字符串转为字节数组才能输出通过FileInputStream和FileOutputStream可以对任意类型的文件复制拷贝
|--BufferedOutputStream(字节输出缓冲流,其实就是一个包装类,创建对象时要接收一个OutputStream,内部封装了一个1024*8的字节数组)
字符流
|--Reader(字符输入流,字符流的抽象父类,抽象类不能直接创建对象,必须使用子类)
|--FileReader(文件字符输入流,就是以字符的形式读取文本文件中的内容)
|--read()每次读取一个字符,即可以按照字符大小读取,返回值类型提升为int类型
|--read(char[] b)每次读取多个字符,将内容放入字符数组b中
|--BufferedReader(字符输入缓冲流,其实就是一个包装类,注意:创建对象时要接收一个Reader,内部封装了一个1024*8的字符数组),例如传入FileReader或转换流InputStreamReader都可以
|--使用BufferedReader和BufferedWriter就不用再定义数组了
|--readLine()可以读取一行字符(不包含换行符号),注意:只有BufferReader才有读取一行的方法,其他流没有
|--newLine()是写入换行方法,根据不同系统平台可以执行相应换行操作,即可以跨平台|--LineNumberReader是BufferedReader的子类, 具有相同的功能, 并且可以统计行号|--getLineNumber()方法可以获取当前行号
|--setLineNumber()方法可以设置当前行号
|--Writer(字符输出流,字符流的抽象父类)
|--FileWriter(文件字符输出流,就是以字符的形式将内容写入到文件中)
|--write('a')/write("aaaa")可以写入单个字符或者写入字符串
|--write(char[] b, int off, int len)将字符数组b里的内容,从所以为off的位置开始,总共写len个
注意: FileInputStream和FileOutputStream用于读写字节流的
FileReader和FileWriter是用于读写字符流的
字符流不能用于图片的拷贝,只能拷贝文本文件
|--BufferedWriter(字符输出缓冲流,其实就是一个包装类,创建对象时要接收一个Writer,内部封装了一个1024*8的字符数组)
|--newLine()可以输出一个跨平台的换行符号"\r\n"
转换流(使用指定的码表读写字符)
|--InputStreamReader字节输入流到字符输入流的桥梁
|--OutputStreamWriter字符输出流到字节输出流的桥梁
其它流
|--SequenceInputStream序列流
|--序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推.
|--SequenceInputStream(InputStream in1,InputStream in2)
|--SequenceInputStream(Enumeration en)
|--ByteArrayOutputStream字节数组内存输出流
|--是将文件或键盘录入的数据写入到内存中的字节数组
|--ByteArrayInputStream字节数组内存输入流
|--是以字节的方式读取内存中的字节数组数据