文章目录
一、IO 流的体系结构
- 字节流:万能流,但是不能处理纯文本文件,因为会乱码。
抽象类
InputStream、OutputStream
子类
FileInputStream、FileOutputStream - 字符流:处理纯文本文件
抽象类
Reader、Writer
子类
FileReader、FileWriter
二、FileOutputStream 字节输出流
1. 构造方法
FileOutputStream(String name):输出流关联文件,参数是文件路径字符串。文件不存在自动创建。
FileOutputStream(File file) :输出流关联文件,参数是File对象
FileOutputStream(String name, boolean append):第二个参数,追加写入的开关
FileOutputStream(File file, boolean append) :第二个参数,追加写入的开关
2. 成员方法
write(int i):写出一个字节
write(byte[] bys):写出一个字节数组
write(byte[] bys, int off, int len):写出字节数组的一部分。开始索引,长度
FileOutputStream fos = new FileOutputStream("d:\\IoTest\\A.txt");
fos.write(97);//文件中显示:a
byte[] bytes = {
97, 98, 99};
fos.write(bytes);//文件中显示:abc
fos.write("你好".getBytes());//文件中显示:你好
字符串转字节数组:字符串.getBytes()
注意:如果文件不存在,则自动创建;如果文件存在,先清空文件,再写操作。
如果追加写
FileOutputStream fos = new FileOutputStream("d:\\IoTest\\A.txt", true);
3.关流
- jdk7 之前
FileOutputStream fos = null;
try {
fos = new FileOutputStream("d:\\IoTest\\A.txt", true);
//System.out.println(10/0);
fos.write("abc".getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- jdk7 之后
try (FileOutputStream fos = new FileOutputStream("d:\\IoTest\\A.txt", true);) {
fos.write("abcef".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
try(需要调用close方法的对象){}
不是随便的类,需要实现AutoCloseable的close()方法。
三、FileInputStream 字节输入流
构造方法
FileInputStream(String name):输入流关联文件,参数是文件路径字符串。文件不存在会报错!
FileInputStream(File file) :输入流关联文件,参数是File对象
注意事项:
文件不存在,会抛出FileNotFoundException 异常。(文件夹,拒绝访问)
成员方法
read():读取一个字节并返回,如果达到文件结尾返回-1
read(byte[] b):将读取到的字节,放入数组中,返回有效的字节长度,如果到达文件结尾返回-1
文件内容:ab
FileInputStream fis = new FileInputStream("D:\\IoTest\\A.txt");
int i = fis.read();
System.out.println(i);//97
int i1 = fis.read();
System.out.println(i1);//98
int i2 = fis.read();
System.out.println(i2);//-1
int i3 = fis.read();
System.out.println(i3);//-1
fis.close();