一、概念
1.IO流:存储和读取数据的解决
二、流的分类
1.流的方向:输出流和输入流
2.操作文本类型:字节流和字符流
三、字节流
1、有字节输出流(outputStream)和字节出入流(inputStream)
2.FileOutputStream
(1)操作本地文本的输出流,可以把程序中的数据写入到本地文件中
(2)书写步骤
创建对象,写出数据,释放资源
(3)三个步骤的细节
创建对象:文本存在,文本不存在,追加写入
写入数据:写出整数,写出字节数组,换行写
释放资源:关闭通道
3.FileInputStrem
(1)操作本地的字节输入流,可以把本地文本中的数据读取到程序中来
(2)书写步骤:
(1)创建字节输入流对象:如果指定的路径没有存在,就会报错
(2)读取数据:读取时一次读取一个字节,输出来的数据会在ASCll上对应的数字
读取到文本末尾了,read方法会返回-1
(3)释放资源:每次完必须释放资源
IO的异常处理
手动处理异常
//IO流的异常处理
//手动捕获异常
public class IOException {
public static void main(String[] args) {
FileInputStream file = null;
int numbers;
byte[] bytes = new byte[4];
try {
file = new FileInputStream("src/com/io流/b.txt");
// numbers=file.read(bytes);
while ((numbers = file.read(bytes)) != -1){
String s = new String(bytes,0,numbers);
System.out.print(s);
}
}
catch (java.io.IOException e) {
e.printStackTrace();
}
finally {
if (file != null){
try {
file.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
}
}
}
JDK7自动处理IO异常
public class IOExceptionJDK7 {
public static void main(String[] args) {
// JDK处理的异常
int numbers;
byte[] bytes = new byte[4];
try (FileInputStream file = new FileInputStream("src/com/io流/a.txt")){
// numbers=file.read(bytes);
while ((numbers = file.read(bytes)) != -1){
String s = new String(bytes,0,numbers);
System.out.print(s);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
JDK9处理异常
public class IOExceptionJDK9 {
// JDK9处理IO异常
public static void main(String[] args) throws FileNotFoundException {
int numbers;
byte[] bytes = new byte[4];
FileInputStream file =new FileInputStream("src/com/io流/a.txt");
try (file){
// numbers=file.read(bytes);
while ((numbers = file.read(bytes)) != -1){
String s = new String(bytes,0,numbers);
System.out.print(s);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、字符流原理
1.创建字符输入流对象
底层:关联文件,并创建缓冲区(长度为8192的字节数组)
2.读取数据
底层:(1)判断缓冲区是否有数据,如果有数据直接获取,如果没有,就从文件中获取到缓冲区中,在从缓冲区读取数据 ,如果文件中没有数据了,返回结果 -1
(2)空参的reade方法:一次读取一个字节,遇到中文一次读取多个字节,把字节解码成十进制返回,
(3)有参的read方法:把读取字节,解码,强转三步合并了,强转之后的字符放到数组中
五、高级
1.缓冲流
字节缓冲流 :字节缓冲输入流(BufferedInputStream)字节缓冲输出流(BufferedOuputStream)
字符缓冲流:字符缓冲输入流(BufferedReader)字符缓冲输出流(BufferedWriter)
2.缓冲流有几种:有4中,以上4种
3.缓冲流为什么能提高性能
缓冲流自带长度为8192的缓冲区
可以显著提高字节流的读写性能
对于字符流提高不明显,对于字符流缓冲区而言关键点是两个特有的方法
3.字符缓冲流两个特有的方法是什么?
字符缓冲输入流BufferedReader: readLine()
字符缓冲输出流Buffereder: newLine()